{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "_uuid": "55f0ed2ac468f0eb59c24726ca0c9bdc8884c345"
   },
   "outputs": [],
   "source": [
    "This notebook is simpified version of the final project in the [How to Win a Data Science Competition: Learn from Top Kagglers](https://www.coursera.org/learn/competitive-data-science) course. Simplified means without ensembling.\n",
    "\n",
    "#### Pipline\n",
    "* load data\n",
    "* heal data and remove outliers\n",
    "* work with shops/items/cats objects and features\n",
    "* create matrix as product of item/shop pairs within each month in the train set\n",
    "* get monthly sales for each item/shop pair in the train set and merge it to the matrix\n",
    "* clip item_cnt_month by (0,20)\n",
    "* append test to the matrix, fill 34 month nans with zeros\n",
    "* merge shops/items/cats to the matrix\n",
    "* add target lag features\n",
    "* add mean encoded features\n",
    "* add price trend features\n",
    "* add month\n",
    "* add days\n",
    "* add months since last sale/months since first sale features\n",
    "* cut first year and drop columns which can not be calculated for the test set\n",
    "* select best features\n",
    "* set validation strategy 34 test, 33 validation, less than 33 train\n",
    "* fit the model, predict and clip targets for the test set"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "f03379ee467570732ebb2b3d20062fea0584d57d"
   },
   "source": [
    "# Part 1, perfect features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19",
    "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "pd.set_option('display.max_rows', 500)\n",
    "pd.set_option('display.max_columns', 100)\n",
    "\n",
    "from itertools import product\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from xgboost import XGBRegressor\n",
    "from xgboost import plot_importance\n",
    "\n",
    "def plot_features(booster, figsize):    \n",
    "    fig, ax = plt.subplots(1,1,figsize=figsize)\n",
    "    return plot_importance(booster=booster, ax=ax)\n",
    "\n",
    "import time\n",
    "import sys\n",
    "import gc\n",
    "import pickle\n",
    "sys.version_info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "_uuid": "f0a1c729d4fb3d6609f9dfb163ebe92fa9dc654c",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "items = pd.read_csv('D:/GIT/kaggle_develop/predictSales/input/items.csv')\n",
    "shops = pd.read_csv('D:/GIT/kaggle_develop/predictSales/input/shops.csv')\n",
    "cats = pd.read_csv('D:/GIT/kaggle_develop/predictSales/input/item_categories.csv')\n",
    "train = pd.read_csv('D:/GIT/kaggle_develop/predictSales/input/sales_train_v2.csv')\n",
    "# set index to ID to avoid droping it later\n",
    "test  = pd.read_csv('D:/GIT/kaggle_develop/predictSales/input/test.csv').set_index('ID')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "ed7a190645750a818e29a6291ba2553a91764c7c"
   },
   "source": [
    "## Outliers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "425d8f2dc08378977b393bf80c5fdcf0fba2c992"
   },
   "source": [
    "There are items with strange prices and sales. After detailed exploration I decided to remove items with price > 100000 and sales > 1001 (1000 is ok)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "_uuid": "5a864412fafc3129a3e9bd5bb1f18a7cf0c62935"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x4f0a438>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkwAAAELCAYAAAAr0dmKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAEp9JREFUeJzt3X+wpXV9H/D3h91VWbCCCxVNMrNrgGTXITEMcWLaODQFs+u0Y9Pajq3Drk2VDm1Fo3VqZQm7I23TVMMMTCYULA20TBO0dcy0w0ZIJcVlqi4JLlgV1gSnGITlUoxooSx8+8d57s3hsud+9+7ee/bHfb1mzpxzvuc53+/3+fCcw/s+z3P2qdZaAACY7KSjPQEAgGOdwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQMfqxSx8xhlntPXr1y/TVAAAls699977RGvtzKXoa1GBaf369dmzZ89SjAsAsKyq6ltL1ZdDcgAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAx9cB03XXX5brrrpv2sAAAh23qgWnXrl3ZtWvXtIcFADhsDskBAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB2rpz3gD37wg2kPCQBwRKYemFpr0x4SAOCIOCQHANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdAhMAAAdAhMAQIfABADQITABAHQITAAAHQITAECHwAQA0CEwAQB0CEwAAB0CEwBAh8AEANAhMAEAdKxe7gFmZmayffv2HDhwIA899NBc+4UXXrjcQ8+pqrTWkiSXXHJJ7r333rTW8p73vCdXXnllTjvttHznO9/JlVdemdtuuy3PPPNMHnvssXz4wx/Oxz/+8ezcuTM33XRTDhw4kFWrVuXqq6/OunXr5tZv586d2bp1a6666qp86EMfyic+8Yns3Lkzt9xyS6666qokyc6dO3PVVVfNvW+Sffv25fLLL89rXvOanHzyyfnYxz7Wfc/4PGbH+OxnP5trrrkmZ511Vk4//fS5Oc/MzOTKK69Ma+1F63GoZse5/PLLc+21175knebP40S30tYXloPPEceDVTt27DjkhW+44YYdl1566aIGuP7667N79+48+eSTi5za8ti7d2/279+fJ554Ivfcc0++//3v53vf+15aa9m9e3cef/zxPPXUU3nuueeye/fuPPvss7nnnnvy7W9/OzMzM3niiSfy7LPP5s1vfnOS0frdfffdc32Nv+eRRx7JM888k/vuuy933313nnnmmbn3TfLBD34w+/fvz1NPPZX9+/e/aKyFzM5jdozLLrssSfL000+/aM7XX399vvCFL7xkPQ7V7Dh79+7Ngw8++JJ1mj+PE91KW19YDj5HLJedO3c+umPHjhuWoq9lPSQ3MzOT22+/fTmHOCJPP/30i54fOHDgoM/nL3f77bdnZmYmMzMz2bVrV1prc8uMv6e1lttvv31umV27dmVmZmbifPbt25eHH374oGMtZHweu3btyq233jq3R228n3379mXXrl2L6nvSOA8//PBL1mn+PBbT9/Fopa0vLAefI44XyxqYbr755peEkBPBc889l1tuuSU333xzXnjhhe6yzz33XJLk+eefzy233DJx2auvvnriWAsZn8fzzz+fG2+88aD9XH311XNzOdS+J40za3yd5s9jMX0fj1ba+sJy8DnieNENTFV1aVXtqao9+/fvX1Tnd95550v2dJwIWmu54447cuedd3YDYWttrgYHDhzIHXfcMXHZ+XuXxsdayPg8Js1nfK/QYvqeNM6s8XWaP4/F9H08WmnrC8vB54jjRTcwtdZuaK1d0Fq74Mwzz1xU5xdddFGq6rAnd6yqqlx88cW56KKLsnr1wufNV9VcDVavXp2LL7544rLr16+fONZCxucxaT5VlfXr17/ov8eh9D1pnFnj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\n",
      "text/plain": [
       "<Figure size 720x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,4))\n",
    "plt.xlim(-100, 3000)\n",
    "sns.boxplot(x=train.item_cnt_day)\n",
    "\n",
    "plt.figure(figsize=(10,4))\n",
    "plt.xlim(train.item_price.min(), train.item_price.max()*1.1)\n",
    "sns.boxplot(x=train.item_price)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "_uuid": "7e621535d112603c60aeb2c2f83dbbf96d36b732",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = train[train.item_price<100000]\n",
    "train = train[train.item_cnt_day<1001]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "d2f99368478e3063b1c379537944e954d7186928"
   },
   "source": [
    "There is one item with price below zero. Fill it with median."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "_uuid": "0fc6b90b22fe232f4240ac8f965cc52b3db5526a",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "median = train[(train.shop_id==32)&(train.item_id==2973)&(train.date_block_num==4)&(train.item_price>0)].item_price.median()\n",
    "train.loc[train.item_price<0, 'item_price'] = median"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "7da194c285d696b5c6978148bf0143b9b2a7b0c5"
   },
   "source": [
    "Several shops are duplicates of each other (according to its name). Fix train and test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "_uuid": "00fe91e9c482ea413abd774ff903fe3d152785dd",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Якутск Орджоникидзе, 56\n",
    "train.loc[train.shop_id == 0, 'shop_id'] = 57\n",
    "test.loc[test.shop_id == 0, 'shop_id'] = 57\n",
    "# Якутск ТЦ \"Центральный\"\n",
    "train.loc[train.shop_id == 1, 'shop_id'] = 58\n",
    "test.loc[test.shop_id == 1, 'shop_id'] = 58\n",
    "# Жуковский ул. Чкалова 39м²\n",
    "train.loc[train.shop_id == 10, 'shop_id'] = 11\n",
    "test.loc[test.shop_id == 10, 'shop_id'] = 11"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "a30f0521464e1fa20444e66d24bbdcb76b93f6de"
   },
   "source": [
    "## Shops/Cats/Items preprocessing\n",
    "Observations:\n",
    "* Each shop_name starts with the city name.\n",
    "* Each category contains type and subtype in its name."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "_uuid": "12fae4c8d0c8f3e817307d1e0ffc6831e9a8d696",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "shops.loc[shops.shop_name == 'Сергиев Посад ТЦ \"7Я\"', 'shop_name'] = 'СергиевПосад ТЦ \"7Я\"'\n",
    "shops['city'] = shops['shop_name'].str.split(' ').map(lambda x: x[0])\n",
    "shops.loc[shops.city == '!Якутск', 'city'] = 'Якутск'\n",
    "shops['city_code'] = LabelEncoder().fit_transform(shops['city'])\n",
    "shops = shops[['shop_id','city_code']]\n",
    "\n",
    "cats['split'] = cats['item_category_name'].str.split('-')\n",
    "cats['type'] = cats['split'].map(lambda x: x[0].strip())\n",
    "cats['type_code'] = LabelEncoder().fit_transform(cats['type'])\n",
    "# if subtype is nan then type\n",
    "cats['subtype'] = cats['split'].map(lambda x: x[1].strip() if len(x) > 1 else x[0].strip())\n",
    "cats['subtype_code'] = LabelEncoder().fit_transform(cats['subtype'])\n",
    "cats = cats[['item_category_id','type_code', 'subtype_code']]\n",
    "\n",
    "items.drop(['item_name'], axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "62c5f83fa222595da99294f465ab28e80ce415e9"
   },
   "source": [
    "## Monthly sales\n",
    "Test set is a product of some shops and some items within 34 month. There are 5100 items * 42 shops = 214200 pairs. 363 items are new compared to the train. Hence, for the most of the items in the test set target value should be zero. \n",
    "In the other hand train set contains only pairs which were sold or returned in the past. Tha main idea is to calculate monthly sales and <b>extend it with zero sales</b> for each unique pair within the month. This way train data will be similar to test data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "_uuid": "fb69350aef2c28cdb619e2532de1e24ab3c43899"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(363, 5100, 214200)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(list(set(test.item_id) - set(test.item_id).intersection(set(train.item_id)))), len(list(set(test.item_id))), len(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "_uuid": "7626c7455ea71b65894c6c866519df15080fa2ac"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14.71947169303894"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix = []\n",
    "cols = ['date_block_num','shop_id','item_id']\n",
    "for i in range(34):\n",
    "    sales = train[train.date_block_num==i]\n",
    "    matrix.append(np.array(list(product([i], sales.shop_id.unique(), sales.item_id.unique())), dtype='int16'))\n",
    "    \n",
    "matrix = pd.DataFrame(np.vstack(matrix), columns=cols)\n",
    "matrix['date_block_num'] = matrix['date_block_num'].astype(np.int8)\n",
    "matrix['shop_id'] = matrix['shop_id'].astype(np.int8)\n",
    "matrix['item_id'] = matrix['item_id'].astype(np.int16)\n",
    "matrix.sort_values(cols,inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "867e91a7570dd78b4834f4f1a166e58f80b63f93"
   },
   "source": [
    "Aggregate train set by shop/item pairs to calculate target aggreagates, then <b>clip(0,20)</b> target value. This way train target will be similar to the test predictions.\n",
    "\n",
    "<i>I use floats instead of ints for item_cnt_month to avoid downcasting it after concatination with the test set later. If it would be int16, after concatination with NaN values it becomes int64, but foat16 becomes float16 even with NaNs.</i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "_uuid": "9fef5477060be7d2e6c85dcb79d8e18e6253f7dd",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train['revenue'] = train['item_price'] *  train['item_cnt_day']\n",
    "def getWeek(str):\n",
    "    weekday = time.strptime(str, '%d.%m.%Y').tm_wday\n",
    "    if weekday == 5 or weekday==6 :\n",
    "        return 1\n",
    "    else :\n",
    "        return 0\n",
    "train['week'] = train['date'].map(lambda x:getWeek(x))\n",
    "train['weekday_cnt'] =(1-train['week'] )*train['item_cnt_day']\n",
    "train['weekend_cnt'] =train['week']*train['item_cnt_day']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>date_block_num</th>\n",
       "      <th>shop_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>item_price</th>\n",
       "      <th>item_cnt_day</th>\n",
       "      <th>revenue</th>\n",
       "      <th>week</th>\n",
       "      <th>weekday_cnt</th>\n",
       "      <th>weekend_cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>02.01.2013</td>\n",
       "      <td>0</td>\n",
       "      <td>59</td>\n",
       "      <td>22154</td>\n",
       "      <td>999.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>999.00</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>03.01.2013</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>2552</td>\n",
       "      <td>899.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>899.00</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>05.01.2013</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>2552</td>\n",
       "      <td>899.00</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-899.00</td>\n",
       "      <td>1</td>\n",
       "      <td>-0.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>06.01.2013</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>2554</td>\n",
       "      <td>1709.05</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1709.05</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>15.01.2013</td>\n",
       "      <td>0</td>\n",
       "      <td>25</td>\n",
       "      <td>2555</td>\n",
       "      <td>1099.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1099.00</td>\n",
       "      <td>0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  date_block_num  shop_id  item_id  item_price  item_cnt_day  \\\n",
       "0  02.01.2013               0       59    22154      999.00           1.0   \n",
       "1  03.01.2013               0       25     2552      899.00           1.0   \n",
       "2  05.01.2013               0       25     2552      899.00          -1.0   \n",
       "3  06.01.2013               0       25     2554     1709.05           1.0   \n",
       "4  15.01.2013               0       25     2555     1099.00           1.0   \n",
       "\n",
       "   revenue  week  weekday_cnt  weekend_cnt  \n",
       "0   999.00     0          1.0          0.0  \n",
       "1   899.00     0          1.0          0.0  \n",
       "2  -899.00     1         -0.0         -1.0  \n",
       "3  1709.05     1          0.0          1.0  \n",
       "4  1099.00     0          1.0          0.0  "
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "_uuid": "7dd27181918fc7df89676e24d72130d183929d2d"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date_block_num</th>\n",
       "      <th>shop_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>weekday_cnt_month</th>\n",
       "      <th>weekend_cnt_month</th>\n",
       "      <th>item_cnt_month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>27</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>33</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>317</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>438</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>471</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   date_block_num  shop_id  item_id  weekday_cnt_month  weekend_cnt_month  \\\n",
       "0               0        2       27                1.0                0.0   \n",
       "1               0        2       33                0.0                1.0   \n",
       "2               0        2      317                1.0                0.0   \n",
       "3               0        2      438                0.0                1.0   \n",
       "4               0        2      471                2.0                0.0   \n",
       "\n",
       "   item_cnt_month  \n",
       "0             1.0  \n",
       "1             1.0  \n",
       "2             1.0  \n",
       "3             1.0  \n",
       "4             2.0  "
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = train.groupby(['date_block_num','shop_id','item_id']).agg({'weekday_cnt': ['sum'],'weekend_cnt': ['sum']})\n",
    "group.columns = ['weekday_cnt_month','weekend_cnt_month']\n",
    "group['item_cnt_month'] = group['weekday_cnt_month']+group['weekend_cnt_month']\n",
    "group.reset_index(inplace=True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79.51495051383972"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matrix = pd.merge(matrix, group, on=cols, how='left')\n",
    "matrix['weekday_cnt_month'] = (matrix['weekday_cnt_month']\n",
    "                                .fillna(0)\n",
    "                                .clip(0,20) # NB clip target here\n",
    "                                .astype(np.float16))\n",
    "matrix['weekend_cnt_month'] = (matrix['weekend_cnt_month']\n",
    "                                .fillna(0)\n",
    "                                .clip(0,20) # NB clip target here\n",
    "                                .astype(np.float16))\n",
    "matrix['item_cnt_month'] = (matrix['item_cnt_month']\n",
    "                                .fillna(0)\n",
    "                                .clip(0,20) # NB clip target here\n",
    "                                .astype(np.float16))\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date_block_num</th>\n",
       "      <th>shop_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>weekday_cnt_month_x</th>\n",
       "      <th>weekend_cnt_month_x</th>\n",
       "      <th>item_cnt_month_x</th>\n",
       "      <th>weekday_cnt_month_y</th>\n",
       "      <th>weekend_cnt_month_y</th>\n",
       "      <th>item_cnt_month_y</th>\n",
       "      <th>weekday_cnt_month</th>\n",
       "      <th>weekend_cnt_month</th>\n",
       "      <th>item_cnt_month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>11127999</th>\n",
       "      <td>34</td>\n",
       "      <td>45</td>\n",
       "      <td>18454</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11128000</th>\n",
       "      <td>34</td>\n",
       "      <td>45</td>\n",
       "      <td>16188</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11128001</th>\n",
       "      <td>34</td>\n",
       "      <td>45</td>\n",
       "      <td>15757</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11128002</th>\n",
       "      <td>34</td>\n",
       "      <td>45</td>\n",
       "      <td>19648</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11128003</th>\n",
       "      <td>34</td>\n",
       "      <td>45</td>\n",
       "      <td>969</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          date_block_num  shop_id  item_id  weekday_cnt_month_x  \\\n",
       "11127999              34       45    18454                  0.0   \n",
       "11128000              34       45    16188                  0.0   \n",
       "11128001              34       45    15757                  0.0   \n",
       "11128002              34       45    19648                  0.0   \n",
       "11128003              34       45      969                  0.0   \n",
       "\n",
       "          weekend_cnt_month_x  item_cnt_month_x  weekday_cnt_month_y  \\\n",
       "11127999                  0.0               0.0                  0.0   \n",
       "11128000                  0.0               0.0                  0.0   \n",
       "11128001                  0.0               0.0                  0.0   \n",
       "11128002                  0.0               0.0                  0.0   \n",
       "11128003                  0.0               0.0                  0.0   \n",
       "\n",
       "          weekend_cnt_month_y  item_cnt_month_y  weekday_cnt_month  \\\n",
       "11127999                  0.0               0.0                0.0   \n",
       "11128000                  0.0               0.0                0.0   \n",
       "11128001                  0.0               0.0                0.0   \n",
       "11128002                  0.0               0.0                0.0   \n",
       "11128003                  0.0               0.0                0.0   \n",
       "\n",
       "          weekend_cnt_month  item_cnt_month  \n",
       "11127999                0.0             0.0  \n",
       "11128000                0.0             0.0  \n",
       "11128001                0.0             0.0  \n",
       "11128002                0.0             0.0  \n",
       "11128003                0.0             0.0  "
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matrix.tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "315bc6107a93f3926a64fd09ea9244e9281ee41f"
   },
   "source": [
    "## Test set\n",
    "To use time tricks append test pairs to the matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "_uuid": "29d02bdb4fa768577607bf735b918ca81da85d41",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test['date_block_num'] = 34\n",
    "test['date_block_num'] = test['date_block_num'].astype(np.int8)\n",
    "test['shop_id'] = test['shop_id'].astype(np.int8)\n",
    "test['item_id'] = test['item_id'].astype(np.int16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "_uuid": "177fbbab94c8057d67d61357d29581248468a74d"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9.437943696975708"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix = pd.concat([matrix, test], ignore_index=True, sort=False, keys=cols)\n",
    "matrix.fillna(0, inplace=True) # 34 month\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "233e394a6cebf36ef002dc76fef8d430026a52b3"
   },
   "source": [
    "## Shops/Items/Cats features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "_uuid": "7dfd5df3e2bcaee4c312f3979736f52c40f2560f"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14.847484588623047"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix = pd.merge(matrix, shops, on=['shop_id'], how='left')\n",
    "matrix = pd.merge(matrix, items, on=['item_id'], how='left')\n",
    "matrix = pd.merge(matrix, cats, on=['item_category_id'], how='left')\n",
    "matrix['city_code'] = matrix['city_code'].astype(np.int8)\n",
    "matrix['item_category_id'] = matrix['item_category_id'].astype(np.int8)\n",
    "matrix['type_code'] = matrix['type_code'].astype(np.int8)\n",
    "matrix['subtype_code'] = matrix['subtype_code'].astype(np.int8)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "8358b291fdc8e0e7d1b5700974803b3f104715f7"
   },
   "source": [
    "## Traget lags"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "_uuid": "9cd7bcc7643ce4545475e8e6f80d09a979aac42d",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def lag_feature(df, lags, col):\n",
    "    tmp = df[['date_block_num','shop_id','item_id',col]]\n",
    "    for i in lags:\n",
    "        shifted = tmp.copy()\n",
    "        shifted.columns = ['date_block_num','shop_id','item_id', col+'_lag_'+str(i)]\n",
    "        shifted['date_block_num'] += i\n",
    "        df = pd.merge(df, shifted, on=['date_block_num','shop_id','item_id'], how='left')\n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "_uuid": "78bf7ece93ebc4629ad0e48cd6a9927788d8706d",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "148.0851218700409"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'item_cnt_month')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'weekday_cnt_month')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'weekend_cnt_month')\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "c67bf4dbcef884ffe9d19c65d37bc4de1f287ef6"
   },
   "source": [
    "## Mean encoded features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "_uuid": "763aca242154ea10fa0a62fffadb4ef90e9532d6",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "50.63300013542175"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_avg_item_cnt','date_avg_weekday_cnt','date_avg_weekend_cnt' ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num'], how='left')\n",
    "matrix['date_avg_item_cnt'] = matrix['date_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_avg_weekday_cnt'] = matrix['date_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_avg_weekend_cnt'] = matrix['date_avg_weekend_cnt'].astype(np.float16)\n",
    "\n",
    "matrix = lag_feature(matrix, [1], 'date_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_avg_weekend_cnt')\n",
    "matrix.drop(['date_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "_uuid": "fc9166c4e678ebb99d03566f1751b7d4b5c690d2",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "185.62599992752075"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'item_id']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_item_avg_item_cnt','date_item_avg_weekday_cnt','date_item_avg_weekend_cnt' ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num','item_id'], how='left')\n",
    "matrix['date_item_avg_item_cnt'] = matrix['date_item_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_item_avg_weekday_cnt'] = matrix['date_item_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_item_avg_weekend_cnt'] = matrix['date_item_avg_weekend_cnt'].astype(np.float16)\n",
    "\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_item_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_item_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_item_avg_weekend_cnt')\n",
    "\n",
    "matrix.drop(['date_item_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_item_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_item_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "_uuid": "73f2552c403c5f67bbf07f28d69efcc015d00f32",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "200.8730001449585"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'shop_id']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_shop_avg_item_cnt','date_shop_avg_weekday_cnt','date_shop_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num','shop_id'], how='left')\n",
    "matrix['date_shop_avg_item_cnt'] = matrix['date_shop_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_shop_avg_weekday_cnt'] = matrix['date_shop_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_shop_avg_weekend_cnt'] = matrix['date_shop_avg_weekend_cnt'].astype(np.float16)\n",
    "\n",
    "\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_shop_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_shop_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1,2,3,6,12], 'date_shop_avg_weekend_cnt')\n",
    "matrix.drop(['date_shop_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "_uuid": "c3948a9b206bc480b31385c29a713aa49747de19",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "80.83500003814697"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'item_category_id']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_cat_avg_item_cnt','date_cat_avg_weekday_cnt','date_cat_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num','item_category_id'], how='left')\n",
    "matrix['date_cat_avg_item_cnt'] = matrix['date_cat_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_cat_avg_weekday_cnt'] = matrix['date_cat_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_cat_avg_weekend_cnt'] = matrix['date_cat_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_cat_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_cat_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_cat_avg_weekend_cnt')\n",
    "matrix.drop(['date_cat_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_cat_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_cat_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "_uuid": "bf98335755692f0d7666eeac2db1961692f09a16",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "83.32499980926514"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'shop_id', 'item_category_id']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_shop_cat_avg_item_cnt','date_shop_cat_avg_weekday_cnt','date_shop_cat_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'shop_id', 'item_category_id'], how='left')\n",
    "matrix['date_shop_cat_avg_item_cnt'] = matrix['date_shop_cat_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_shop_cat_avg_weekday_cnt'] = matrix['date_shop_cat_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_shop_cat_avg_weekend_cnt'] = matrix['date_shop_cat_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_cat_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_cat_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_cat_avg_weekend_cnt')\n",
    "matrix.drop(['date_shop_cat_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_cat_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_cat_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "_uuid": "3959603ea684eb3cbfd17d557399caa6e9da88e4",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "90.35420155525208"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'shop_id', 'type_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_shop_type_avg_item_cnt','date_shop_type_avg_weekday_cnt','date_shop_type_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'shop_id', 'type_code'], how='left')\n",
    "matrix['date_shop_type_avg_item_cnt'] = matrix['date_shop_type_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_shop_type_avg_weekday_cnt'] = matrix['date_shop_type_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_shop_type_avg_weekend_cnt'] = matrix['date_shop_type_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_type_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_type_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_type_avg_weekend_cnt')\n",
    "matrix.drop(['date_shop_type_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_type_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_type_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "_uuid": "39f66d2e30f691237aa5d41ff9fc3a0eb7e9a788",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "92.9872977733612"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'shop_id', 'subtype_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_shop_subtype_avg_item_cnt','date_shop_subtype_avg_weekday_cnt','date_shop_subtype_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'shop_id', 'subtype_code'], how='left')\n",
    "matrix['date_shop_subtype_avg_item_cnt'] = matrix['date_shop_subtype_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_shop_subtype_avg_weekday_cnt'] = matrix['date_shop_subtype_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_shop_subtype_avg_weekend_cnt'] = matrix['date_shop_subtype_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_subtype_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_subtype_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_shop_subtype_avg_weekend_cnt')\n",
    "matrix.drop(['date_shop_subtype_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_subtype_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_shop_subtype_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "_uuid": "87d57d01beb0830138dabae79b4022d4c6a9cc12",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "105.08750772476196"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'city_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_city_avg_item_cnt','date_city_avg_weekday_cnt','date_city_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'city_code'], how='left')\n",
    "matrix['date_city_avg_item_cnt'] = matrix['date_city_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_city_avg_weekday_cnt'] = matrix['date_city_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_city_avg_weekend_cnt'] = matrix['date_city_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_city_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_city_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_city_avg_weekend_cnt')\n",
    "matrix.drop(['date_city_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_city_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_city_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "_uuid": "db1f0170ec4a6fd9894bc53b36f3166d4b26abcf",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "106.43564224243164"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'item_id', 'city_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_item_city_avg_item_cnt','date_item_city_avg_weekday_cnt','date_item_city_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'item_id', 'city_code'], how='left')\n",
    "matrix['date_item_city_avg_item_cnt'] = matrix['date_item_city_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_item_city_avg_weekday_cnt'] = matrix['date_item_city_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_item_city_avg_weekend_cnt'] = matrix['date_item_city_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_item_city_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_item_city_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_item_city_avg_weekend_cnt')\n",
    "matrix.drop(['date_item_city_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_item_city_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_item_city_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "_uuid": "3cd5232ad63357dacebe9d223cc93dd669132bb7",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "109.66496539115906"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'type_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_type_avg_item_cnt','date_type_avg_weekday_cnt','date_type_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'type_code'], how='left')\n",
    "matrix['date_type_avg_item_cnt'] = matrix['date_type_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_type_avg_weekday_cnt'] = matrix['date_type_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_type_avg_weekend_cnt'] = matrix['date_type_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_type_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_type_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_type_avg_weekend_cnt')\n",
    "matrix.drop(['date_type_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_type_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_type_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "_uuid": "00394f3694ae9c7093176eadac7abeaa79ff5467",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "99.40293908119202"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = matrix.groupby(['date_block_num', 'subtype_code']).agg({'item_cnt_month': ['mean'],'weekday_cnt_month': ['mean'],'weekend_cnt_month': ['mean']})\n",
    "group.columns = [ 'date_subtype_avg_item_cnt','date_subtype_avg_weekday_cnt','date_subtype_avg_weekend_cnt'  ]\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num', 'subtype_code'], how='left')\n",
    "matrix['date_subtype_avg_item_cnt'] = matrix['date_subtype_avg_item_cnt'].astype(np.float16)\n",
    "matrix['date_subtype_avg_weekday_cnt'] = matrix['date_subtype_avg_weekday_cnt'].astype(np.float16)\n",
    "matrix['date_subtype_avg_weekend_cnt'] = matrix['date_subtype_avg_weekend_cnt'].astype(np.float16)\n",
    "matrix = lag_feature(matrix, [1], 'date_subtype_avg_item_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_subtype_avg_weekday_cnt')\n",
    "matrix = lag_feature(matrix, [1], 'date_subtype_avg_weekend_cnt')\n",
    "matrix.drop(['date_subtype_avg_item_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_subtype_avg_weekday_cnt'], axis=1, inplace=True)\n",
    "matrix.drop(['date_subtype_avg_weekend_cnt'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "6bcea31d93ab035ca3fa1ed7c0afddbf602c414a"
   },
   "source": [
    "## Trend features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "0504e9613087237c255914d9ebd165fac4e88cd0"
   },
   "source": [
    "Price trend for the last six months."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "_uuid": "0da2ded8502e273137991fd2bebbadaf19c19622",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "869.5811347961426"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = train.groupby(['item_id']).agg({'item_price': ['mean']})\n",
    "group.columns = ['item_avg_item_price']\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['item_id'], how='left')\n",
    "matrix['item_avg_item_price'] = matrix['item_avg_item_price'].astype(np.float16)\n",
    "\n",
    "group = train.groupby(['date_block_num','item_id']).agg({'item_price': ['mean']})\n",
    "group.columns = ['date_item_avg_item_price']\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num','item_id'], how='left')\n",
    "matrix['date_item_avg_item_price'] = matrix['date_item_avg_item_price'].astype(np.float16)\n",
    "\n",
    "lags = [1,2,3,4,5,6]\n",
    "matrix = lag_feature(matrix, lags, 'date_item_avg_item_price')\n",
    "\n",
    "for i in lags:\n",
    "    matrix['delta_price_lag_'+str(i)] = \\\n",
    "        (matrix['date_item_avg_item_price_lag_'+str(i)] - matrix['item_avg_item_price']) / matrix['item_avg_item_price']\n",
    "\n",
    "def select_trend(row):\n",
    "    for i in lags:\n",
    "        if row['delta_price_lag_'+str(i)]:\n",
    "            return row['delta_price_lag_'+str(i)]\n",
    "    return 0\n",
    "    \n",
    "matrix['delta_price_lag'] = matrix.apply(select_trend, axis=1)\n",
    "matrix['delta_price_lag'] = matrix['delta_price_lag'].astype(np.float16)\n",
    "matrix['delta_price_lag'].fillna(0, inplace=True)\n",
    "\n",
    "# https://stackoverflow.com/questions/31828240/first-non-null-value-per-row-from-a-list-of-pandas-columns/31828559\n",
    "# matrix['price_trend'] = matrix[['delta_price_lag_1','delta_price_lag_2','delta_price_lag_3']].bfill(axis=1).iloc[:, 0]\n",
    "# Invalid dtype for backfill_2d [float16]\n",
    "\n",
    "fetures_to_drop = ['item_avg_item_price', 'date_item_avg_item_price']\n",
    "for i in lags:\n",
    "    fetures_to_drop += ['date_item_avg_item_price_lag_'+str(i)]\n",
    "    fetures_to_drop += ['delta_price_lag_'+str(i)]\n",
    "\n",
    "matrix.drop(fetures_to_drop, axis=1, inplace=True)\n",
    "\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "17765ddb48f52abd88847a42c0a3ffe974e5b121"
   },
   "source": [
    "Last month shop revenue trend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "_uuid": "e633be47f1a22b41487866ce67fb874bd296339e",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "78.67199993133545"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "group = train.groupby(['date_block_num','shop_id']).agg({'revenue': ['sum']})\n",
    "group.columns = ['date_shop_revenue']\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['date_block_num','shop_id'], how='left')\n",
    "matrix['date_shop_revenue'] = matrix['date_shop_revenue'].astype(np.float32)\n",
    "\n",
    "group = group.groupby(['shop_id']).agg({'date_shop_revenue': ['mean']})\n",
    "group.columns = ['shop_avg_revenue']\n",
    "group.reset_index(inplace=True)\n",
    "\n",
    "matrix = pd.merge(matrix, group, on=['shop_id'], how='left')\n",
    "matrix['shop_avg_revenue'] = matrix['shop_avg_revenue'].astype(np.float32)\n",
    "\n",
    "matrix['delta_revenue'] = (matrix['date_shop_revenue'] - matrix['shop_avg_revenue']) / matrix['shop_avg_revenue']\n",
    "matrix['delta_revenue'] = matrix['delta_revenue'].astype(np.float16)\n",
    "\n",
    "matrix = lag_feature(matrix, [1], 'delta_revenue')\n",
    "\n",
    "matrix.drop(['date_shop_revenue','shop_avg_revenue','delta_revenue'], axis=1, inplace=True)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "47e06af411b7d26cd93dad3d6735e48e5fbdee50"
   },
   "source": [
    "## Special features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "_uuid": "bb521e1f33d4124a3b90b47447bdb29150770b6e",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "matrix['month'] = matrix['date_block_num'] % 12"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "b4dc4d2ff86483989c4b74fc02a0d01ca68a5c75"
   },
   "source": [
    "Number of days in a month. There are no leap years."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "_uuid": "e23f0201056b73368e3b70d4c36c6bb9e4a55291",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "days = pd.Series([31,28,31,30,31,30,31,31,30,31,30,31])\n",
    "matrix['days'] = matrix['month'].map(days).astype(np.int8)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "7c096e86eb0043c0f6eeb899de24e28ca4c4e044"
   },
   "source": [
    "Months since the last sale for each shop/item pair and for item only. I use programing approach.\n",
    "\n",
    "<i>Create HashTable with key equals to {shop_id,item_id} and value equals to date_block_num. Iterate data from the top. Foreach row if {row.shop_id,row.item_id} is not present in the table, then add it to the table and set its value to row.date_block_num. if HashTable contains key, then calculate the difference beteween cached value and row.date_block_num.</i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "_uuid": "3458a7056c963167760921417d1f863f074f2b39",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1148.3934907913208"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "cache = {}\n",
    "matrix['item_shop_last_sale'] = -1\n",
    "matrix['item_shop_last_sale'] = matrix['item_shop_last_sale'].astype(np.int8)\n",
    "for idx, row in matrix.iterrows():    \n",
    "    key = str(row.item_id)+' '+str(row.shop_id)\n",
    "    if key not in cache:\n",
    "        if row.item_cnt_month!=0:\n",
    "            cache[key] = row.date_block_num\n",
    "    else:\n",
    "        last_date_block_num = cache[key]\n",
    "        matrix.at[idx, 'item_shop_last_sale'] = row.date_block_num - last_date_block_num\n",
    "        cache[key] = row.date_block_num         \n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "_uuid": "28b29fae3906d870b4dc3064a7f359b6d3abf623",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "750.9495904445648"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "cache = {}\n",
    "matrix['item_last_sale'] = -1\n",
    "matrix['item_last_sale'] = matrix['item_last_sale'].astype(np.int8)\n",
    "for idx, row in matrix.iterrows():    \n",
    "    key = row.item_id\n",
    "    if key not in cache:\n",
    "        if row.item_cnt_month!=0:\n",
    "            cache[key] = row.date_block_num\n",
    "    else:\n",
    "        last_date_block_num = cache[key]\n",
    "        if row.date_block_num>last_date_block_num:\n",
    "            matrix.at[idx, 'item_last_sale'] = row.date_block_num - last_date_block_num\n",
    "            cache[key] = row.date_block_num         \n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "61987e6adc1bec2ea897eec837c0253f7f73fdb5"
   },
   "source": [
    "Months since the first sale for each shop/item pair and for item only."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "_uuid": "ad0869709bbada35726d5ca41dd913d817249f8e",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.687368631362915"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix['item_shop_first_sale'] = matrix['date_block_num'] - matrix.groupby(['item_id','shop_id'])['date_block_num'].transform('min')\n",
    "matrix['item_first_sale'] = matrix['date_block_num'] - matrix.groupby('item_id')['date_block_num'].transform('min')\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "966cb34ccfe849fbb3707d93270691cb8eef7a89"
   },
   "source": [
    "## Final preparations\n",
    "Because of the using 12 as lag value drop first 12 months. Also drop all the columns with this month calculated values (other words which can not be calcucated for the test set)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "_uuid": "04df1bc4240f409a5d4521c6f70c2ced44f7c3d4",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25.392539024353027"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "matrix = matrix[matrix.date_block_num > 11]\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "48a14784050901f878b40f093e4bc34e07ecce05"
   },
   "source": [
    "Producing lags brings a lot of nulls."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "_uuid": "8e5d8cb5cea9be28af4a0486cc1bf797e5b5c7ee",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "14.006400346755981"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "def fill_na(df):\n",
    "    for col in df.columns:\n",
    "        if ('_lag_' in col) & (df[col].isnull().any()):\n",
    "            if ('item_cnt' in col):\n",
    "                df[col].fillna(0, inplace=True)         \n",
    "    return df\n",
    "\n",
    "matrix = fill_na(matrix)\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "_uuid": "00bf3fffc1b143d0555d03b9d79b5fd00d9d0dc9",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['date_block_num', 'shop_id', 'item_id', 'weekday_cnt_month_x',\n",
       "       'weekend_cnt_month_x', 'item_cnt_month_x', 'weekday_cnt_month_y',\n",
       "       'weekend_cnt_month_y', 'item_cnt_month_y', 'weekday_cnt_month',\n",
       "       ...\n",
       "       'date_subtype_avg_weekday_cnt_lag_1',\n",
       "       'date_subtype_avg_weekend_cnt_lag_1', 'delta_price_lag',\n",
       "       'delta_revenue_lag_1', 'month', 'days', 'item_shop_last_sale',\n",
       "       'item_last_sale', 'item_shop_first_sale', 'item_first_sale'],\n",
       "      dtype='object', length=102)"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "matrix.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {
    "_uuid": "5f4e4c5c552daf8d4da6999ae4b63f13459b2887",
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 6639294 entries, 4488710 to 11128003\n",
      "Columns: 102 entries, date_block_num to item_first_sale\n",
      "dtypes: float16(84), float64(5), int16(1), int8(12)\n",
      "memory usage: 1.4 GB\n"
     ]
    }
   ],
   "source": [
    "matrix.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "_uuid": "5d9988f8da8876f74092fbf827ceb6c61dd09d5e",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "matrix.to_pickle('D:/GIT/kaggle_develop/predictSales/input/dataWeek.pkl')\n",
    "del matrix\n",
    "del cache\n",
    "del group\n",
    "del items\n",
    "del shops\n",
    "del cats\n",
    "del train\n",
    "# leave test for submission\n",
    "gc.collect();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "b69932efb440af8f6435f3cd802fbcd15682af71"
   },
   "source": [
    "# Part 2, xgboost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "_uuid": "a54364495b1818e9f069efa0c53500bf9e21d5f9",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_pickle('D:/GIT/kaggle_develop/predictSales/input/data.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['date_block_num', 'shop_id', 'item_id', 'item_cnt_month', 'city_code',\n",
       "       'item_category_id', 'type_code', 'subtype_code', 'item_cnt_month_lag_1',\n",
       "       'item_cnt_month_lag_2', 'item_cnt_month_lag_3', 'item_cnt_month_lag_6',\n",
       "       'item_cnt_month_lag_12', 'date_avg_item_cnt_lag_1',\n",
       "       'date_item_avg_item_cnt_lag_1', 'date_item_avg_item_cnt_lag_2',\n",
       "       'date_item_avg_item_cnt_lag_3', 'date_item_avg_item_cnt_lag_6',\n",
       "       'date_item_avg_item_cnt_lag_12', 'date_shop_avg_item_cnt_lag_1',\n",
       "       'date_shop_avg_item_cnt_lag_2', 'date_shop_avg_item_cnt_lag_3',\n",
       "       'date_shop_avg_item_cnt_lag_6', 'date_shop_avg_item_cnt_lag_12',\n",
       "       'date_cat_avg_item_cnt_lag_1', 'date_shop_cat_avg_item_cnt_lag_1',\n",
       "       'date_shop_type_avg_item_cnt_lag_1',\n",
       "       'date_shop_subtype_avg_item_cnt_lag_1', 'date_city_avg_item_cnt_lag_1',\n",
       "       'date_item_city_avg_item_cnt_lag_1', 'date_type_avg_item_cnt_lag_1',\n",
       "       'date_subtype_avg_item_cnt_lag_1', 'delta_price_lag',\n",
       "       'delta_revenue_lag_1', 'month', 'days', 'item_shop_last_sale',\n",
       "       'item_last_sale', 'item_shop_first_sale', 'item_first_sale'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "e5742775554b9e48e4d5c19784184069ad3eb9fb"
   },
   "source": [
    "Select perfect features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "_uuid": "bfc928a916bb8b285b2fe90fb1a311cf2fbbf2e3",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = data[[\n",
    "    'date_block_num',\n",
    "    'shop_id',\n",
    "    'item_id',\n",
    "    'item_cnt_month',\n",
    "    'city_code',\n",
    "    'item_category_id',\n",
    "    'type_code',\n",
    "    'subtype_code',\n",
    "    'item_cnt_month_lag_1',\n",
    "    'item_cnt_month_lag_2',\n",
    "    'item_cnt_month_lag_3',\n",
    "    'item_cnt_month_lag_6',\n",
    "    'item_cnt_month_lag_12',\n",
    "    'date_avg_item_cnt_lag_1',\n",
    "    'date_item_avg_item_cnt_lag_1',\n",
    "    'date_item_avg_item_cnt_lag_2',\n",
    "    'date_item_avg_item_cnt_lag_3',\n",
    "    'date_item_avg_item_cnt_lag_6',\n",
    "    'date_item_avg_item_cnt_lag_12',\n",
    "    'date_shop_avg_item_cnt_lag_1',\n",
    "    'date_shop_avg_item_cnt_lag_2',\n",
    "    'date_shop_avg_item_cnt_lag_3',\n",
    "    'date_shop_avg_item_cnt_lag_6',\n",
    "    'date_shop_avg_item_cnt_lag_12',\n",
    "    'date_cat_avg_item_cnt_lag_1',\n",
    "    'date_shop_cat_avg_item_cnt_lag_1',\n",
    "    #'date_shop_type_avg_item_cnt_lag_1',\n",
    "    #'date_shop_subtype_avg_item_cnt_lag_1',\n",
    "    'date_city_avg_item_cnt_lag_1',\n",
    "    'date_item_city_avg_item_cnt_lag_1',\n",
    "    #'date_type_avg_item_cnt_lag_1',\n",
    "    #'date_subtype_avg_item_cnt_lag_1',\n",
    "    'delta_price_lag',\n",
    "    'month',\n",
    "    'days',\n",
    "    'item_shop_last_sale',\n",
    "    'item_last_sale',\n",
    "    'item_shop_first_sale',\n",
    "    'item_first_sale',\n",
    "]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_uuid": "11eb4f2f5ada18aa8993ec55e8c63e80758fc19e"
   },
   "source": [
    "Validation strategy is 34 month for the test set, 33 month for the validation set and 13-33 months for the train."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {
    "_uuid": "9af76d7b80064573a453e5e10c35b76fc31c47a4",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_train = data[data.date_block_num < 33].drop(['item_cnt_month'], axis=1)\n",
    "Y_train = data[data.date_block_num < 33]['item_cnt_month']\n",
    "X_valid = data[data.date_block_num == 33].drop(['item_cnt_month'], axis=1)\n",
    "Y_valid = data[data.date_block_num == 33]['item_cnt_month']\n",
    "X_test = data[data.date_block_num == 34].drop(['item_cnt_month'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {
    "_uuid": "6ea5437e8949db6d3e54e68b7b0c18cd0befe38c",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "del data\n",
    "gc.collect();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {
    "_uuid": "acef75c36501f808d45f81fc69f9708fc3283bc3",
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[09:47:30] Tree method is automatically selected to be 'approx' for faster speed. to use old behavior(exact greedy algorithm on single machine), set tree_method to 'exact'\n",
      "[0]\tvalidation_0-rmse:1.15141\tvalidation_1-rmse:1.11807\n",
      "Multiple eval metrics have been passed: 'validation_1-rmse' will be used for early stopping.\n",
      "\n",
      "Will train until validation_1-rmse hasn't improved in 10 rounds.\n",
      "[1]\tvalidation_0-rmse:1.10735\tvalidation_1-rmse:1.08392\n",
      "[2]\tvalidation_0-rmse:1.06659\tvalidation_1-rmse:1.05269\n",
      "[3]\tvalidation_0-rmse:1.03189\tvalidation_1-rmse:1.02596\n",
      "[4]\tvalidation_0-rmse:1.00498\tvalidation_1-rmse:1.00753\n",
      "[5]\tvalidation_0-rmse:0.979867\tvalidation_1-rmse:0.989649\n",
      "[6]\tvalidation_0-rmse:0.958703\tvalidation_1-rmse:0.97398\n",
      "[7]\tvalidation_0-rmse:0.940096\tvalidation_1-rmse:0.960666\n",
      "[8]\tvalidation_0-rmse:0.924939\tvalidation_1-rmse:0.950871\n",
      "[9]\tvalidation_0-rmse:0.912174\tvalidation_1-rmse:0.942352\n",
      "[10]\tvalidation_0-rmse:0.901083\tvalidation_1-rmse:0.936478\n",
      "[11]\tvalidation_0-rmse:0.891786\tvalidation_1-rmse:0.931768\n",
      "[12]\tvalidation_0-rmse:0.883641\tvalidation_1-rmse:0.92719\n",
      "[13]\tvalidation_0-rmse:0.87642\tvalidation_1-rmse:0.923792\n",
      "[14]\tvalidation_0-rmse:0.870718\tvalidation_1-rmse:0.920773\n",
      "[15]\tvalidation_0-rmse:0.865535\tvalidation_1-rmse:0.918204\n",
      "[16]\tvalidation_0-rmse:0.860881\tvalidation_1-rmse:0.916307\n",
      "[17]\tvalidation_0-rmse:0.856204\tvalidation_1-rmse:0.91397\n",
      "[18]\tvalidation_0-rmse:0.852734\tvalidation_1-rmse:0.912673\n",
      "[19]\tvalidation_0-rmse:0.849764\tvalidation_1-rmse:0.911661\n",
      "[20]\tvalidation_0-rmse:0.846613\tvalidation_1-rmse:0.910806\n",
      "[21]\tvalidation_0-rmse:0.843903\tvalidation_1-rmse:0.909905\n",
      "[22]\tvalidation_0-rmse:0.841533\tvalidation_1-rmse:0.908505\n",
      "[23]\tvalidation_0-rmse:0.839533\tvalidation_1-rmse:0.907554\n",
      "[24]\tvalidation_0-rmse:0.837756\tvalidation_1-rmse:0.907059\n",
      "[25]\tvalidation_0-rmse:0.835509\tvalidation_1-rmse:0.906205\n",
      "[26]\tvalidation_0-rmse:0.833741\tvalidation_1-rmse:0.905931\n",
      "[27]\tvalidation_0-rmse:0.832203\tvalidation_1-rmse:0.906136\n",
      "[28]\tvalidation_0-rmse:0.831008\tvalidation_1-rmse:0.90613\n",
      "[29]\tvalidation_0-rmse:0.829464\tvalidation_1-rmse:0.905241\n",
      "[30]\tvalidation_0-rmse:0.828063\tvalidation_1-rmse:0.904633\n",
      "[31]\tvalidation_0-rmse:0.827042\tvalidation_1-rmse:0.90452\n",
      "[32]\tvalidation_0-rmse:0.82617\tvalidation_1-rmse:0.904398\n",
      "[33]\tvalidation_0-rmse:0.825459\tvalidation_1-rmse:0.904012\n",
      "[34]\tvalidation_0-rmse:0.824784\tvalidation_1-rmse:0.904029\n",
      "[35]\tvalidation_0-rmse:0.824043\tvalidation_1-rmse:0.904398\n",
      "[36]\tvalidation_0-rmse:0.823427\tvalidation_1-rmse:0.904099\n",
      "[37]\tvalidation_0-rmse:0.822861\tvalidation_1-rmse:0.904141\n",
      "[38]\tvalidation_0-rmse:0.822256\tvalidation_1-rmse:0.903857\n",
      "[39]\tvalidation_0-rmse:0.821425\tvalidation_1-rmse:0.90384\n",
      "[40]\tvalidation_0-rmse:0.820687\tvalidation_1-rmse:0.903736\n",
      "[41]\tvalidation_0-rmse:0.820154\tvalidation_1-rmse:0.903559\n",
      "[42]\tvalidation_0-rmse:0.819918\tvalidation_1-rmse:0.90369\n",
      "[43]\tvalidation_0-rmse:0.819243\tvalidation_1-rmse:0.903438\n",
      "[44]\tvalidation_0-rmse:0.818635\tvalidation_1-rmse:0.903026\n",
      "[45]\tvalidation_0-rmse:0.818312\tvalidation_1-rmse:0.90298\n",
      "[46]\tvalidation_0-rmse:0.817831\tvalidation_1-rmse:0.903042\n",
      "[47]\tvalidation_0-rmse:0.817391\tvalidation_1-rmse:0.902678\n",
      "[48]\tvalidation_0-rmse:0.817126\tvalidation_1-rmse:0.90274\n",
      "[49]\tvalidation_0-rmse:0.816706\tvalidation_1-rmse:0.902788\n",
      "[50]\tvalidation_0-rmse:0.816197\tvalidation_1-rmse:0.903245\n",
      "[51]\tvalidation_0-rmse:0.815874\tvalidation_1-rmse:0.903178\n",
      "[52]\tvalidation_0-rmse:0.81537\tvalidation_1-rmse:0.903285\n",
      "[53]\tvalidation_0-rmse:0.81471\tvalidation_1-rmse:0.903684\n",
      "[54]\tvalidation_0-rmse:0.814557\tvalidation_1-rmse:0.903723\n",
      "[55]\tvalidation_0-rmse:0.814185\tvalidation_1-rmse:0.903502\n",
      "[56]\tvalidation_0-rmse:0.813446\tvalidation_1-rmse:0.903548\n",
      "[57]\tvalidation_0-rmse:0.813201\tvalidation_1-rmse:0.903585\n",
      "Stopping. Best iteration:\n",
      "[47]\tvalidation_0-rmse:0.817391\tvalidation_1-rmse:0.902678\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1116.769070148468"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = time.time()\n",
    "\n",
    "model = XGBRegressor(\n",
    "    max_depth=8,\n",
    "    n_estimators=1000,\n",
    "    min_child_weight=500, \n",
    "    colsample_bytree=0.8, \n",
    "    subsample=0.8, \n",
    "    eta=0.3,    \n",
    "    seed=42)\n",
    "\n",
    "model.fit(\n",
    "    X_train, \n",
    "    Y_train, \n",
    "    eval_metric=\"rmse\", \n",
    "    eval_set=[(X_train, Y_train), (X_valid, Y_valid)], \n",
    "    verbose=True, \n",
    "    early_stopping_rounds = 10)\n",
    "\n",
    "time.time() - ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {
    "_uuid": "8ff5a80a22d046c5ca1cb27e938c757b607551d2",
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "Y_pred = model.predict(X_valid).clip(0, 20)\n",
    "Y_test = model.predict(X_test).clip(0, 20)\n",
    "\n",
    "submission = pd.DataFrame({\n",
    "    \"ID\": test.index, \n",
    "    \"item_cnt_month\": Y_test\n",
    "})\n",
    "submission.to_csv('D:/GIT/kaggle_develop/predictSales/input/xgb_submission.csv', index=False)\n",
    "\n",
    "# save predictions for an ensemble\n",
    "pickle.dump(Y_pred, open('D:/GIT/kaggle_develop/predictSales/input/xgb_train.pickle', 'wb'))\n",
    "pickle.dump(Y_test, open('D:/GIT/kaggle_develop/predictSales/input/xgb_test.pickle', 'wb'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "_uuid": "c8adc7c93323eb77baeceb2e8db17390b5c4deb3",
    "collapsed": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xb4bf390>"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAw8AAAM2CAYAAACwqb+zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xl4VdXZ/vHvzSCioaKCFrVKEUWEIAUVrVpDq9QBp6rVilUcSm2dB6rWqtRWAQWFKi3iBMXhtejPuUUsGqtUBJnFilhNXwZfFBQlgMrw/P7YO+khJOFAkhOS3J/r4vKctfda69lPguzn7LXPVkRgZmZmZma2KY1qOwAzMzMzM6sbXDyYmZmZmVlWXDyYmZmZmVlWXDyYmZmZmVlWXDyYmZmZmVlWXDyYmZmZmVlWXDyYmZnVIkkjJd1Y23GYmWVDfs6DmZnVRZKKgF2BdRnN+0bE4iqMWQA8HBF7VC26uknSaGBhRPymtmMxs62TrzyYmVlddkJE5GX82eLCoTpIalKb81eFpMa1HYOZbf1cPJiZWb0j6RBJ/5S0XNKs9IpCybbzJP1L0gpJH0j6edq+PfA3YDdJxemf3SSNlvT7jP4FkhZmvC+SdK2k2cBKSU3Sfk9K+kTSh5IuqyTW0vFLxpb0K0kfS/pI0smSjpP0nqRPJf06o+8ASU9Iejw9numSDsjY3lFSYZqHuZJOLDPvnyT9VdJK4AKgD/Cr9NifS/e7TtK/0/HfkXRKxhh9Jb0uaYikz9JjPTZj+06SHpK0ON3+dMa23pJmprH9U1KXrH/AZlZrXDyYmVm9Iml34AXg98BOwDXAk5Jap7t8DPQGvgGcB9wlqVtErASOBRZvwZWMnwDHAy2B9cBzwCxgd+AHwBWSfpjlWN8Etk373gTcB5wNdAeOAG6S1C5j/5OAcemxPgo8LamppKZpHBOAXYBLgUckdcjoexZwK9AC+DPwCHB7euwnpPv8O513B+C3wMOS2mSM0QOYB7QCbgcekKR021hgO6BTGsNdAJK6AQ8CPwd2Bu4FnpXULMscmVktcfFgZmZ12dPpJ9fLMz7VPhv4a0T8NSLWR8RLwFvAcQAR8UJE/DsSr5KcXB9RxTj+EBELImI1cBDQOiJuiYivI+IDkgLgzCzHWgPcGhFrgP8hOSkfHhErImIuMBfI/JR+WkQ8ke5/J0nhcUj6Jw8YlMbxMvA8SaFT4pmImJTm6cvygomIcRGxON3ncWA+cHDGLv+JiPsiYh0wBmgD7JoWGMcCF0XEZxGxJs03wM+AeyPizYhYFxFjgK/SmM1sK1Zn12aamZkBJ0fE38u07QWcLumEjLamwCsA6bKam4F9ST5E2w6YU8U4FpSZfzdJyzPaGgOvZTnWsvREHGB1+t8lGdtXkxQFG80dEevTJVW7lWyLiPUZ+/6H5IpGeXGXS9I5wFVA27Qpj6SgKfF/GfOvSi865JFcCfk0Ij4rZ9i9gHMlXZrRtk1G3Ga2lXLxYGZm9c0CYGxE/KzshnRZzJPAOSSfuq9Jr1iULLMp7ysIV5IUGCW+Wc4+mf0WAB9GxD5bEvwW+FbJC0mNgD2AkuVW35LUKKOA2BN4L6Nv2ePd4L2kvUiumvwAeCMi1kmayX/zVZkFwE6SWkbE8nK23RoRt2YxjpltRbxsyczM6puHgRMk/VBSY0nbpjci70Hy6XYz4BNgbXoVoldG3yXAzpJ2yGibCRyX3vz7TeCKTcw/BfgivYm6eRpDZ0kHVdsRbqi7pB+l3/R0Bcnyn8nAmySFz6/SeyAKgBNIlkJVZAmQeT/F9iQFxSeQ3GwOdM4mqIj4iOQG9D9K2jGN4Xvp5vuAiyT1UGJ7ScdLapHlMZtZLXHxYGZm9UpELCC5ifjXJCe9C4D+QKOIWAFcBvwF+IzkhuFnM/q+CzwGfJDeR7EbyU2/s4AikvsjHt/E/OtITtK7Ah8CS4H7SW44rgnPAGeQHM9PgR+l9xd8DZxIct/BUuCPwDnpMVbkAWD/kntIIuIdYCjwBklhkQ9M2ozYfkpyD8e7JDeqXwEQEW+R3PdwTxr3+0DfzRjXzGqJHxJnZmZWR0kaALSPiLNrOxYzaxh85cHMzMzMzLLi4sHMzMzMzLLiZUtmZmZmZpYVX3kwMzMzM7OsuHgwMzMzM7Os+CFxZtWoZcuW0b59+9oOo8FYuXIl22+/fW2H0aA457nnnOeW8517znluZeZ72rRpSyOi9eb0d/FgVo123XVX3nrrrdoOo8EoLCykoKCgtsNoUJzz3HPOc8v5zj3nPLcy8y3pP5vb38uWzMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMwsKy4ezMzMzMy2QNu2bcnPz6dr164ceOCBG2wbMmQIkli6dCkAn3/+OSeccAIHHHAAnTp14qGHHqqNkKusSW0HYGZmZmZWV73yyiu0atVqg7YFCxbw0ksvseeee5a2jRgxgv3335/nnnuOTz75hA4dOtCnTx+22WabXIdcJfX+yoOkAZKuqWT7yZL238KxL5J0Tvq6r6TdtjTO2ibpFklHpa+vkLRdbcdUQlJXScdtYp++ku6p5nkflPSxpLerc1wzMzOr36688kpuv/12JJW2SWLFihVEBMXFxey00040aVL3PsevexFXv5OB54F3NrdjRIzMeNsXeBtYXD1h5VZE3JTx9grgYWBVLYVTVlfgQOCvOZ53NHAP8OdsO6xes462171QYwHZhq7OX0tf5zunnPPcc85zy/nOvbqW86JBx5e+lkSvXr2QxM9//nP69evHs88+y+67784BBxywQb9LLrmEE088kd12240VK1bw+OOP06hR3fscXxFR2zFUO0k3AOcAC4BPgGnA50A/YBvgfeCnJCelz6fbPgdOTYcYAbQmOXn+WUS8W8E8A4BioIjkRHMRsBo4FNgfuBPIA5YCfSPiI0mFwAygezrHOcD1QD7weET8ppLjehr4FrAtMDwiRkn6BfDtiPhVuk9foHtEXCrpRqBPmoelwLSIGFLB2KPTXOwGDAHmAUsjoqekXsBvgWbAv4HzIqJYUhHwKNATaJrmdyDQHrijTHFVdr5fkfwM1gN/i4jr0ty8mY7XErggff8+0DzN78CIeLyc8foCB0bEJZJOAH5D8rNeBvSJiCWSWqfx7gxMBY5Jc7W0kjjbAs9HROdK9umXHjutWrXuftOw+yra1arZrs1hyerajqJhcc5zzznPLec79+pazvN336H09dKlS2nVqhWfffYZ11xzDZdddhkjR47kjjvuIC8vjzPPPJN7772XHXbYgVdffZW3336bX/7ylyxevJhrrrmG+++/n+233z6n8RcXF5OXlwdAz549p0XEgZvosoF6d+VBUnfgTOA7JMc3naR4+H8RcV+6z++BCyLibknPkpwcPpFumwhcFBHzJfUA/gh8v7I5I+IJSZcA10TEW5KaAncDJ0XEJ5LOAG4Fzk+7fB0R35N0OfAMSSHxKfBvSXdFxLIKpjo/Ij6V1ByYKulJ4AngDeBX6T5nALdKOpCkGCqbh0pFxB8kXQX0jIilklqRnIgfFRErJV0LXAXcknZZEBGHSrqLpIA6jKS4mQuUWzxIOpbkik+PiFglaaeMzU0i4uB0mdLNEXGUpJtIC4NNxZ96HTgkIkLShWlurgZuBl6OiIGSjiE94a+qiBgFjALYs137GDqn3v212mpdnb8W5zu3nPPcc85zy/nOvbqW86I+BeW2z5o1iy+++IJly5ZxySXJKcvSpUu59NJLmTJlCnfccQfXXXcdRxxxBAAPPPAArVu35uCDD85V6AAUFhZSUFCwxf3rzk8qe0cAT0XEKoC0OADonBYNLUmuBrxYtqOkPOC7wLiMNWrNtiCGDkBn4KV0nMbARxnbS2KaA8yNiI/S+T8gubJQUfFwmaRT0tffAvaJiMmSPpB0CDA/nXsScDnwTESsTsd+bguOA+AQkqsok9Jj2YakWCnvWPIiYgWwQtKXklpGxPJyxjwKeKjkZxQRn2Zs+3/pf6cBbbcw5j2AxyW1SeP9MG0/HDglnXO8pM+2cPwKNW/amHkZlzOtZhUWFlb4P3GrGc557jnnueV8515dzfnKlStZv349LVq0YOXKlUyYMIGbbrqJjz/+uHSftm3b8tZbb9GqVSv23HNPJk6cyBFHHMGSJUuYN28e7dq1q8Uj2DL1sXgAKG8t1mjg5IiYlS5xKShnn0bA8ojoWsX5RVIUHFrB9q/S/67PeF3yvtyfiaQCkpPuQ9NP6wtJPuEHeBz4MfAuSeEUyrxDp2oEvBQRP6lg+2YfSzpmRevlSsZYV0n/TbkbuDMink3zNiBjXjMzM7MqW7JkCaecknymu3btWs466yyOOeaYCve/8cYb6du3L/n5+UQEgwcP3uhbmuqC+lg8/AMYLWkQyfGdANwLtAA+SpcU9SFZPw+wIt1GRHwh6UNJp0fEuPQEvEtEzMpi3tJxSO4XaC3p0Ih4I51z34iYW4Xj2gH4LC0c9iO5IlDi/wE3AP8Brk3bXgfulTSQJA/HA9kuxi85lqXAZGCEpPYR8X76LUx7RMR7VTiWCcBNkh4tWbZU5upDRfFkawf++/M9N6P9dZIia3B6H8eOmxO0mZmZWYl27doxa1blp4hFRUWlr3fbbTcmTJhQw1HVvLp3i/cmRMR0kk/iZwJPAq+lm24kufn2JZJP6Ev8D9Bf0gxJe5MUFhdImkWybv+kLKceDYyUNJNkmdJpJCeps9JYvluV4wLGA00kzQZ+R3JSD0BEfEbybVF7RcSUtG0qyZKiWSTFxVskN4VnYxTwN0mvRMQnJN8k9Vg692Rgv6ocSESMT2N7K81XhV+lm3oF2F/SzPT+kU0ZQLL07DWSAqjEb4FekqYDx5IsJVtR0SCSHiNZotVB0kJJF2Qxt5mZmVm9VS+/bckSkvLSb0XajuSKTL+0uGqQJDUD1kXEWkmHAn+qhiVqG+jQoUPMmzevOoe0SlT1pi/bfM557jnnueV8555znluZ+Zbkb1uyDYxKH4C3LTCmIRcOqT2Bv0hqBHwN/KyW4zEzMzOrU1w8ZCF9bsTpZZrHRcStNTDXzsDEcjb9oJKvcC1XRJxVzvgjSL5ONdPwiHhoc8bOhqR8YGyZ5q8iokcVxjyP5JukMk2KiIs31Tci5pN8dW3meNWWbzMzM7P6zsVDFtIiodoLhQrmWkby8LqaGn+TJ9nVONccqvlY0iKn2gqdms63mZmZWX1S726YNjMzMzOzmuHiwczMzMzMsuLiwczMzKwOWbduHd/5znfo3bv3Bu2XXnopeXl5pe//8Y9/0K1bN5o0acITTzyR6zCtnnLxYGZmZlaHDB8+nI4dO27Q9tZbb7F8+fIN2vbcc09Gjx7NWWdt9P0pZltsqykeJA2QVOHDwiSdnH7taHXN11fSPdU1XlVIainpl7Ucw/0l+ZX069qMpSxJBZIqfcjepn5/tnDe8ZKWS3q+Osc1MzPbUgsXLuSFF17gwgsvLG1bt24d/fv35/bbb99g37Zt29KlSxcaNdpqTvesHqhL37Z0MvA8yZOU65uWwC+BP9ZWABFxYcbbXwO31VYs5SgAioF/5njeO4DtgJ9n22H1mnW0ve6FmovINnB1/lr6Ot855ZznnnOeW1trvosGHQ/AFVdcwe23386KFStKt91zzz2ceOKJtGnTprbCswakVktRSTdImifp70CHtO1nkqZKmiXpSUnbpZ86nwjcIWmmpL3TP+MlTZP0mqT9KpnndElvp2P+I2PTbukY8yXdnrH/TyTNSfsMzmgvljRU0nRJEyW1rmTO9pL+ns45PY03L+03PR3/pHT3QcDe6bHdUcF45faVNDjzqkX6CfzVkhpJ+qOkuZKel/RXSadVEm+hpAMlDQKap7E8km47W9KUtO1eSY0z8jE4/Rn8XdLB6TgfSDqxkrkaSxqSHsdsSZem7UWSfptxjPtJagtcBFyZzn9EReNmjL/R71Davrekyem2WyQVVzZOREwEVlS2j5mZWa48//zz7LLLLnTv3r20bfHixYwbN45LL720FiOzhkQRUTsTS92B0UAPkisg04GRwEMlD+eS9HtgSUTcLWk08HxEPJFumwhcFBHzJfUABkbE9yuYaw5wTEQsktQyIpZL6gvcRPLQsK+AecDhwDpgMtAd+AyYAPwhIp6WFMDZEfGIpJuAXSLikgrmfBMYFBFPSdqWpFD7GtguIr6Q1CqdZx9gr/TYOleSryYV9O0KDIuII9P93gGOAQ4Gzgd6A7sA/wJ+VpK/csYvBK6JiLckFUdEXtreEbgd+FFErJH0R2ByRPw5zcdxEfE3SU8B2wPHA/uTPNG63OcnSPoFcBRwRkSslbRTRHwqqQgYmv68fwl0i4gLJQ0AiiNiSCX5Kd1H0s4V/A49DzwSEY9JuggYUnKclYxbkOaldyX79AP6AbRq1br7TcPuq2xIq0a7Noclq2s7iobFOc895zy3ttZ85+++A/fddx8TJkygcePGfP3116xatYqmTZvStGlTttlmGwA+/vhj2rRpwyOPPFLad9CgQRx66KEceeSRtRV+pYqLize40dtqVma+e/bsOS0iDtyc/rW5bOkI4KmIWAUg6dm0vXN6wtcSyANeLNtRUh7wXWCcpJLmZpXMNQkYLekvwP/LaJ8YEZ+nY75DchK/M1AYEZ+k7Y8A3wOeBtYDj6d9Hy4zVmZ8LYDdI+IpgIj4Mm1vCtwm6XvpWLsDu1YS9wbDltc3ImZI2kXSbkBr4LOI+F9JV5E8BXs98H+SXslynrJ+QFJITU1z3Rz4ON32NTA+fT2H5OnRa9JirW0lYx4FjIyItQAR8WnGtpKcTgN+tIUxV/Q7dCjJ8jeAR4EKi5HNERGjgFEAe7ZrH0Pn1KXVgHXb1flrcb5zyznPPec8t7bWfBf1KaCgoKD0fWFhIUOGDOH55ze8LS8vL49FixZt0DZ69Gg6deq0Qf+tSWFh4VYbW31U1XzX9t+O8i57jAZOjohZ6dWBgnL2aQQsr+iT7Y0mibgovTpxPDBTUkm/rzJ2W0eSD5XtX9nQFbRXNEYfkhP87ulJdhGwbZZzVdb3CeA04JvA/2wihs0lkqsI15ezbU3899LVetJ8RsT69EpJZWNWlLuSn0nJz2NLjGbTv0M1onnTxsxL16VazSssLKSoT0Fth9GgOOe555znVn3K99SpUznllFP47LPPeO6557j55puZO3dubYdldVxt3vPwD+AUSc3TT+pPSNtbAB+ln9L3ydh/RbqNiPgC+FDS6QBKHFDRRJL2jog3I+ImYCnwrUriehM4UlKrdG3/T4BX022NSE7SAc4CXi9vgDS+hZJOTudvlq673wH4OD3570lypWODY6tERX0hKRjOTGMrWZb0OnBqeu/DrmzeCfSaNP8AE4HTJO2SHstOkvaquGtWJgAXlRQYknbaxP7Z5CdTRb9Dk4FT09dnbsZ4ZmZmW5WCgoKNrjpAsiSlxEEHHcTChQtZuXIly5Ytc+Fg1aLWioeImE6yBGgm8CTwWrrpRpIT+JeAdzO6/A/QX9IMSXuTnBReIGkWMBc4iYrdkd6A+zZJ0TKrkrg+Aq4HXkn3mx4Rz6SbVwKdJE0Dvg/cUsmcPwUukzSb5FuCvgk8Ahwo6a00/nfTOZcBk5TcoF3uDdMV9U37zyU5YV6Uxg9JThcCbwP3kuT080rizTQKmC3pkYh4B/gNMCE9lpeAqn6dw/3A/6ZzzCIpxCrzHEmhmdUN01T8O3QFcJWkKSTHUGk+JL0GjAN+IGmhpB9mMbeZmZlZvVVrN0zXRZk3EtcFkvIioljSzsAU4LCI+L/ajqu2pFd/VkdESDoT+ElEVFZ0brYOHTrEvHnzqnNIq4TXyeaec557znluOd+555znVma+JdWpG6at5j0vqSWwDfC7hlw4pLoD9yi583s5ybdRmZmZmVmW6lXxIOkG4PQyzeMi4tbqGL+8qw6SRgCHlWkeHhEPbckckvKBsWWav4qIHps7VkQUlDP+U8C3yzRfGxEbfatVVaXLfAaXaf4wIk6pwphb/DOOiNeADe6Nqc58m5mZmdV39ap4SE8gq6VQ2Iw5L67m8eaQPLuhRlTlxH0L5nqRcr5qt4pjVuvPuKbzbWZmZlaf1OoTps3MzMzMrO5w8WBmZmZmZllx8WBmZmZmZllx8WBmZma2GdatW8d3vvMdevfuDcCHH35Ijx492GeffTjjjDP4+uuvS/f9y1/+wv7770+nTp0466xNPdbIbOvn4sEMkNRS0i8z3hdI2vjRnWZm1uANHz6cjh07lr6/9tprufLKK5k/fz477rgjDzzwAADz589n4MCBTJo0iblz5zJs2LDaCtms2rh4MEu0BH65yb3MzKxBW7hwIS+88AIXXnghABHByy+/zGmnnQbAueeey9NPPw3Afffdx8UXX8yOO+4IwC677FI7QZtVo3r1Va3WMEhqC4wHXgcOAWYBDwG/BXYB+gDvAw8C7YBVQL+ImC1pALBn2r4nMCwi/gAMAvaWNBN4CXgByJP0BNAZmAacHZt4JPvqNetoe90L1Xm4Vomr89fS1/nOKec895zz3Koo30WDjgfgiiuu4Pbbb2fFihUALFu2jJYtW9KkSXJKtccee7Bo0SIA3nvvPQAOO+ww1q1bx4ABAzjmmGNycRhmNcbFg9VV7UkeFtcPmAqcBRwOnAj8GlgAzIiIkyV9H/gz/32ew35AT6AFME/Sn4DrgM4R0RWSZUvAd4BOwGJgEsnDAF8vG4ikfmkctGrVmpvy19bA4Vp5dm2e/ENvueOc555znlsV5buwsJA33niDNWvWsGLFCmbOnMmyZct4/fXXWb16NYWFhQB8/PHHrFq1isLCQpYsWcKyZcv47W9/yyeffMJPf/pTHnroIfLyNnrmbINWXFxcmj+reVXNt4sHq6s+TB/whqS5wMSICElzgLbAXsCpABHxsqSdJe2Q9n0hIr4CvpL0MbBrBXNMiYiF6Rwz03E3Kh4iYhQwCmDPdu1j6Bz/tcqVq/PX4nznlnOee855blWU76I+Bbz44otMmzaNvn378uWXX/LFF18wbtw4vvrqKw4//HCaNGnCG2+8wT777ENBQQEHHHAAhxxyCEcddRQA999/P7vuuisHHXRQrg9rq1ZYWEhBQUFth9FgVDXf/r+R1VVfZbxen/F+PcnvdXkf05UsOcrsu46K/x5ku1+p5k0bMy+9tG01r7CwkKI+BbUdRoPinOeec55bleV74MCBDBw4sHS/IUOG8Mgjj3D66afzxBNPcOaZZzJmzBhOOukkAE4++WQee+wx+vbty9KlS3nvvfdo165drg7FrEb4hmmrr/5Bcu9DyRKkpRHxRSX7ryBZxmRmZrZZBg8ezJ133kn79u1ZtmwZF1xwAQA//OEP2Xnnndl///3p2bMnd9xxBzvvvHMtR2tWNb7yYPXVAOAhSbNJbpg+t7KdI2KZpEmS3gb+RnLDtJmZWbkKCgpKl360a9eOKVOmbLSPJO68807uvPPOHEdnVnNcPFidExFFJN+AVPK+bwXbTiqn74Ay7zPHKfv0nsKMbZdsccBmZmZm9YSXLZmZmZmZWVZcPJiZmZmZWVZcPJiZmZmZWVZcPJiZmZmZWVZcPJiZmZmZWVZcPJiZmZmZWVZcPJiZmRlffvklBx98MAcccACdOnXi5ptvBqBPnz506NCBzp07c/7557NmzRoA7rjjDrp27UrXrl3p3LkzjRs35tNPP63NQzCzHHDxYGZmZjRr1oyXX36ZWbNmMXPmTMaPH8/kyZPp06cP7777LnPmzGH16tXcf//9APTv35+ZM2cyc+ZMBg4cyJFHHslOO+1Uy0dhZjXNxUM9J+mf6X/bSir7ELRaJenXtR1DWZIuknROOe1t06dPm5nVS5LIy8sDYM2aNaxZswZJHHfccUhCEgcffDALFy7cqO9jjz3GT37yk1yHbGa1wE+Yruci4rvpy7bAWcCjtRfNRn4N3FaTE0hqEhFrs90/IkZWZb7Va9bR9roXqjKEbYar89fS1/nOKec893KR86JBxwOwbt06unfvzvvvv8/FF19Mjx49SvdZs2YNY8eOZfjw4Rv0XbVqFePHj+eee+6p0RjNbOvgKw/1nKTi9OUg4AhJMyVdKamxpDskTZU0W9LP0/0LJL0q6S+S3pM0SFIfSVMkzZG0dyVz7SrpKUmz0j/fTdufljRN0lxJ/dK2QUDzNJ5H0raz03lmSrpXUuO0/YI0lkJJ90m6J23fS9LENP6JkvZM20dLulPSK8AdkuZLap1uayTpfUmtKjiGAZKuSV93T4/jDeDiKv4ozMy2eo0bN2bmzJksXLiQKVOm8Pbb/73g+stf/pLvfe97HHHEERv0ee655zjssMO8ZMmsgVBE1HYMVoMkFUdEnqQC4JqI6J229wN2iYjfS2oGTAJOB/YCngY6Ap8CHwD3R8TNki4Hvh0RV1Qw1+PAGxExLD3xz4uIzyXtFBGfSmoOTAWOjIhlJbGlfTsCtwM/iog1kv4ITAb+DvwT6AasAF4GZkXEJZKeA56IiDGSzgdOjIiTJY0GWgEnRcQ6STcDn6dx9QJ+HhGnVnAMA4DiiBgiaTZwaUS8KukO4NiI6FxOn35AP4BWrVp3v2nYfVn9bKzqdm0OS1bXdhQNi3Oee7nIef7uO2zUNmbMGLbddlvOOOMMxowZw/z587nlllto1GjDzx1vvPFGjjzySI466qiaDTJHiouLS5dvWW4457mVme+ePXtOi4gDN6e/ly01XL2ALpJOS9/vAOwDfA1MjYiPACT9G5iQ7jMH6FnJmN8HzgGIiHXA52n7ZZJOSV9/K51nWZm+PwC6A1MlATQHPgYOBl6NiE/TeMYB+6Z9DgV+lL4eS1J8lBiXxgDwIPAMMAw4H3iokmMgnWcHoGVEvJox/rHl7RsRo4BRAHu2ax9D5/ivVa5cnb8W5zu3nPPcy0XOi/oU8Mknn9C0aVNatmzJ6tWrufHGG7n22mt5//33mTdvHhMnTqR58+Yb9Pv888+ZO3cu48eEcqMiAAAgAElEQVSPZ/vtt6/RGHOlsLCQgoKC2g6jQXHOc6uq+fa/AA2XSD5Vf3GDxuQKxVcZTesz3q9nM39n0vGOAg6NiFWSCoFtK4hnTERcX6b/KeXsW5HMy2grSxsjFkhaIun7QA+gTzahlxkvK82bNmZeunbYal5hYSFFfQpqO4wGxTnPvVzl/KOPPuLcc89l3bp1rF+/nh//+Mf07t2bJk2asNdee3HooYcC8KMf/YibbroJgKeeeopevXrVm8LBzDbNxUPDsQJokfH+ReAXkl5OlwntCyyq4hwTgV8AJcuWtie5ovFZWjjsBxySsf8aSU0jYk3a9xlJd0XEx5J2SuOdAtwlacf0GE4luQICyXKmM0muCvQBXq8ktvuBh4GxGVckKhQRyyV9LunwiHid7AoOM7M6q0uXLsyYMWOj9rVrK/7Oib59+9K3b98ajMrMtja+YbrhmA2sTW8AvpLkZPodYHr6FaT3UvVi8nKgp6Q5wDSgEzAeaJLeP/A7kvsYSowCZkt6JCLeAX4DTEj3fQloExGLSL6R6U2S+x/eIWM5FHBeuv9P0/kr8iyQRxZLljKcB4xIb5j2Km8zMzNr8HzloZ4ruSE5/XT/B2U2/zr9k6kw/VPSvyDj9QbbyplrCXBSOZsqulfgWuDajPePA4+Xs+ujETFKUhPgKdJ7MCKiiOQ+i7Lj9i1njANIbrR+t6L4074DMl5PS/uVGFB2fzMzM7OGxFcerC4YIGkm8DbwIcm3QWVN0nXAk8D1m9rXzMzMzCrmKw+22STdQPK1rpnGRcStNTFfRFxTxf6DSJ5zUSrXx2BmZmZWH7h4sM2WnmDX6ZPs+nAMZmZmZrnmZUtmZmZmZpYVFw9mZmZmZpYVFw9mZmZmZpYVFw9mZmaVWLBgAT179qRjx4506tSJ4cOHl267++676dChA506deJXv/rVBv3+93//l7y8PIYMGZLrkM3MaoxvmDYzM6tEkyZNGDp0KN26dWPFihV0796do48+miVLlvDMM88we/ZsmjVrxscff7xBvyuvvJJjjy33MTdmZnWWrzxYuSQNkFThV6RmbpfUV9JuNRzPgZL+UI3jFUo6sLrGM7P6q02bNnTr1g2AFi1a0LFjRxYtWsSf/vQnrrvuOpo1awbALrvsUtrn6aefpl27dnTq1KlWYjYzqym+8mDVoS/JA9wW18TgkppExFvAWzUxfnVavWYdba97obbDaDCuzl9LX+c7pxpSzosGHb9xW1ERM2bMoEePHvTv35/XXnuNG264gW233ZYhQ4Zw0EEHsXLlSgYPHsxLL73kJUtmVu+4eLBS6YPTzgEWAJ8A0yTtDYwAWgOrgJ9FxLsZfU4DDgQekbQaOBToD5wANAf+Cfw8IqKCOQuBmcDBwDeA8yNiiqQBwG5AW2CppFHANRHRW1IecHc6bwC/jYgnJfUCfgs0A/4NnBcRxVkc95+Ag9J4n4iIm9P244A7gaXAdKBdRPQup38/oB9Aq1atuSl/7aamtGqya/PkZNZypyHlvLCwcIP3q1ev5vLLL+fCCy9k+vTpfP7558yZM4dBgwbx7rvvcuKJJ/Loo48ycuRIevXqxVtvvUVRURHNmzffaKzNUVxcXKX+tnmc79xzznOrqvl28WAASOoOnAl8h+T3YjowDRgFXBQR8yX1AP4IfL+kX0Q8IekSkhP7t9Kx7omIW9LXY4HewHOVTL99RHxX0veAB4HOaXt34PCIWC2pIGP/G4HPIyI/nWNHSa2A3wBHRcRKSdcCVwG3ZHH4N0TEp5IaAxMldQHeA+4FvhcRH0p6rKLOETEqzRN7tmsfQ+f4r1WuXJ2/Fuc7txpSzov6FJS+XrNmDb179+aiiy7iqquuAqBDhw5cdtllFBQU0LNnT4YMGULnzp1ZvHgxb775JmPGjGH58uU0atSITp06cckll2xRHIWFhRQUFGxyP6seznfuOee5VdV8N4x/ASwbRwBPRcQqAEnPAtsC3wXGSSrZr1kWY/WU9CtgO2AnYC6VFw+PAUTEPyR9Q1LLtP3ZiFhdzv5HkRQ6pP0+k9Qb2B+YlMa6DfBGFrEC/Di9etAEaJOO0wj4ICI+zIix36YGat60MfPKWepgNaOwsHCDEzyreQ0x5xHBBRdcQMeOHUsLB4CTTz6Zl19+mYKCAt577z2+/vprWrVqxWuvvVa6z4ABA8jLy9viwsHMbGvj4sEylV1a1AhYHhFdsx1A0rYkVycOjIgF6fKjbTdz3pL3Kyuappw+Al6KiJ9kGyuApG8D1wAHpUXIaJJ4VWlHM2swJk2axNixY8nPz6dr1+R/h7fddhvnn38+559/Pp07d2abbbZhzJgxZHzQYmZWL7l4sBL/AEZLGkTye3ECybKdDyWdHhHjlPyr2CUiZpXpuwJokb4uKRSWpvcmnAY8sYm5zwBekXQ4yXKkzzfxD/AE4BLgCkiWLQGTgRGS2kfE+5K2A/aIiPc2Mfc3SIqUzyXtChwLFALvAu0ktY2IojRGM2uADj/8cCq4bYuHH3640r4DBgyogYjMzGqPv6rVAIiI6cDjJDcvPwmUXHfvA1wgaRbJ8qOTyuk+GhgpaSbwFXAfMAd4GpiaxfSfSfonMBK4IIv9fw/sKOntNK6eEfEJybc+PSZpNkkxsd+mBkoLoRkkx/YgMCltXw38Ehgv6XVgCfB5FrGZmZmZ1Vu+8mClIuJW4NZyNh1Tzr4DMl4/SVJwlPhN+idbT0bE9RWNn74vJLkiQPoNSueWE9PLJN+atEkRUZDxum8Fu70SEfulV1xGUAe+KtbMzMysJvnKg1nFfpZeTZkL7ECyjMvMzMyswfKVB8sJSSOAw8o0D8+8AlBD8z4FfLtM87UR8eKm+kbEXcBdNRKYmZmZWR3k4sFyIiIurqV5T6mNec3MzMzqIy9bMjMzMzOzrLh4MDMzMzOzrLh4MDOzrdqCBQvo2bMnHTt2pFOnTgwfPhyAG2+8kS5dutC1a1d69erF4sWLgeSJ0Jdddhnt27enS5cuTJ8+vTbDNzOrV1w8mJnZVq1JkyYMHTqUf/3rX0yePJkRI0bwzjvv0L9/f2bPns3MmTPp3bs3t9xyCwB/+9vfmD9/PvPnz2fUqFH84he/qOUjMDOrP1w8VCNJAyRdU8n2kyXtn8uYsiFpN0lPpK+7SjqutmPKJOmK9InRle1TJKlVNc75PUnTJa2VdFp1jWtmm69NmzZ069YNgBYtWtCxY0cWLVrEN77xjdJ9Vq5cScmT6Z955hnOOeccJHHIIYewfPlyPvroo1qJ3cysvvG3LeXWycDzwDu1HUimiFgMlJwgdwUOBP5aexFt5ArgYWBVDuf8X5InVldYDJZn9Zp1tL3uhRoJyDZ2df5a+jrfOZXrnBcNOn7D90VFzJgxgx49egBwww038Oc//5kddtiBV155BYBFixbxrW99q7TPHnvswaJFi2jTpk3O4jYzq6985aGKJN0gaZ6kvwMd0rafSZoqaZakJyVtJ+m7wInAHZJmSto7/TNe0jRJr0nar5J5TpD0pqQZkv4uaVdJjdJP3Ftm7Pd+um1vSZPTOG6RVFzJ2G0lvS1pG+AW4Iw0xjMkbS/pwXScGZJOSvv0lfS0pOckfSjpEklXpftMlrRTJfO1T49hVvrp/t6SCiQVSnpC0ruSHlHiMmA34BVJr2T5M3k6zelcSf0y2i+Q9F46z32S7qlojIgoiojZwPps5jSzmldcXMypp57KsGHDSq863HrrrSxYsIA+ffpwzz3JX+mI2KhvyVUJMzOrGl95qAJJ3YEzge+Q5HI6MA34fxFxX7rP74ELIuJuSc8Cz0dEyRKhicBFETFfUg/gj8D3K5judeCQiAhJFwK/ioirJT0DnAI8lI5RFBFLJD1A8hC2xyRdlM3xRMTXkm4CDoyIS9IYbwNejojz0yJlSlooAXROj31b4H2Sh699R9JdwDnAsAqmegQYFBFPSdqWpIj9VjpWJ2AxMAk4LCL+IOkqoGdELM3mOIDzI+JTSc2BqZKeBJoBNwLdgBXAy8CsLMerVFqg9ANo1ao1N+WvrY5hLQu7Nk8+CbfcyXXOCwsLAVi7di3XX389PXr0YKeddiptL/Htb3+b66+/np49e9KoUSNefPFF1q5N4pw/fz5FRUWsWLEiZ3FXp+Li4o2O12qO8517znluVTXfLh6q5gjgqYhYBZAWBwCd06KhJZAHbPQ0Y0l5wHeBcRmfiDWrZK49gMcltQG2AT5M2x8HbgIeIilkHk/bDyVZJgXwKDBkcw8u1Qs4MeNejm2BPdPXr0TECmCFpM+B59L2OUCX8gaT1ALYPSKeAoiIL9N2gCkRsTB9PxNoS1I0ba7LJJU8HO5bwD7AN4FXI+LTdPxxwL5bMPZGImIUMApgz3btY+gc/7XKlavz1+J851auc17Up4CI4Nxzz+Wwww5j2LD/fiYxf/589tlnHwDuvvtuunfvTkFBAStXruSee+7hlltu4c033+Sb3/wmp556as5irm6FhYUUFBTUdhgNhvOde855blU13/5Xt+o2vj4Oo4GTI2KWpL5AQTn7NAKWR0TXLOe5G7gzIp6VVAAMSNvfANpLak1SLPw+68izI+DUiJi3QWNyleOrjKb1Ge/XU/HvVmVrBzLHW1fJGBVKc3MUcGhErJJUSFLw5GTNQvOmjZlXZo221ZzCwkKK+hTUdhgNSm3kfNKkSYwdO5b8/Hy6dk3+l3nbbbfxwAMPMG/ePBo1asRee+3FyJEjATjuuOP461//Svv27dluu+146KGHchqvmVl95uKhav4BjJY0iCSXJwD3Ai2AjyQ1BfoAi9L9V6TbiIgv0nsFTo+IcUo+eu8SERUtpdkhY5xzSxrTZUxPAXcC/4qIZemmycCpJFciztyMYyqNMfUicKmkS9O5vhMRMzZjvA2kx71Q0skR8bSkZkDjLGPKZtnSDsBnaeGwH3BI2j4FuEvSjul4p5JcITGzrdzhhx9e7n0Mxx1X/hfDSWLEiBE1HZaZWYPkG6arICKmk5yczwSeBF5LN90IvAm8BLyb0eV/gP7pTcV7kxQWF0iaBcwFTqpkugEkS5xeY+OT6MeBs/nvkiVIvqHoKklTgDbA51ke1ivA/iU3TAO/A5oCsyW9nb6vqp+SLC2aDfyTZElRZUYBf8vyhunxQJN07N+RFFFExCLgNpKfy99JvvGqwpxIOkjSQuB04F5Jc7OY28zMzKxe85WHKoqIW4Fby9n0p3L2nQSUfc7DMVnO8wzwTAXb3mLjZTmL+O8N1mcCb1UydhHJzc+k9wQcVGaXn5fTZzTJ8qyS920r2lZO3/lsfGP4B0Bhxj6XZLy+m2TZVoUy5weOrWC3RyNilKQmwFPAhErGm0pyn4mZmZmZpVw81F/dgXvS5VDLgfNrOZ6twQBJR5HcAzEBeLqW4zEzMzOrU1w8bGUk3UCyVCbTuPQKR9Yi4jXggDJj5wNjy+z6VUT02OxAsyBpBHBYmebhEbHFdy9KepONv5XqpxGxyfsXImKjB75VV77NzMzMGgIXD1uZSpZBVcfYc0ieIJ0TEXFxDYxZrYVOTebbzMzMrL7xDdNmZmZmZpYVFw9mZmZmZpYVFw9mZmZmZpYVFw9mZrbVWrBgAT179qRjx4506tSJ4cOHA9C/f3/2228/unTpwimnnMLy5csBWLNmDeeeey75+fl07NiRgQMH1mb4Zmb1josHMzPbajVp0oShQ4fyr3/9i8mTJzNixAjeeecdjj76aN5++21mz57NvvvuW1okjBs3jq+++oo5c+Ywbdo07r33XoqKimr3IMzM6hEXD7bVk/TP9L9tJZ1Vw3NdJOmcctrbpk/YNrMcatOmDd26dQOgRYsWdOzYkUWLFtGrVy+aNEm+MPCQQw5h4cKFAEhi5cqVrF27ltWrV7PNNtvwjW98o9biNzOrb/xVrbbVi4jvpi/bAmcBj9bgXCOr0n/1mnW0ve6F6grHNuHq/LX0db5zKlc5Lxp0/MZtRUXMmDGDHj02/MbmBx98kDPOOAOA0047jWeeeYY2bdqwatUq7rrrLnbaaacaj9fMrKHwlQfb6kkqTl8OAo6QNFPSlZIaS7pD0lRJsyX9PN2/QNKrkv4i6T1JgyT1kTRF0hxJe1cy1wBJ16Svu0uaJekNoNqfWWFm2SsuLubUU09l2LBhG1xJuPXWW2nSpAl9+vQBYMqUKTRu3JjFixfz4YcfMnToUD744IPaCtvMrN5RRNR2DGaVklQcEXmSCoBrIqJ32t4P2CUifi+pGTCJ5GnRewFPAx2BT4EPgPsj4mZJlwPfjogrKphrAFAcEUMkzQYujYhXJd0BHBsRncvp0w/oB9CqVevuNw27r1qP3yq2a3NYsrq2o2hYcpXz/N13KH29du1arr/+eg466CB+/OMfl7aPHz+e5557jqFDh7LtttsCMGzYMPbff3969eoFwODBgzn44IPp2bNnzQddQ4qLi8nLy6vtMBoM5zv3nPPcysx3z549p0XEgZvT38uWrC7rBXSRdFr6fgdgH+BrYGpEfAQg6d/AhHSfOcAmzyIk7QC0jIhX06axwLHl7RsRo4BRAB06dIhL+5y0ZUdjm62wsJAfFxTUdhgNSq5zHhGce+65HHbYYQwbNqy0ffz48Tz77LO8+uqrtG7durT9zTff5N133+XII49k1apV/Oc//2Hw4MF06dIlZzFXt8LCQgr8e54zznfuOee5VdV8u3iwukwkVwZe3KAxuULxVUbT+oz368nu916AL8uZ1bJJkyYxduxY8vPz6dq1KwC33XYbl112GV999RVHH300kNw0PXLkSC6++GLOO+88OnfuTERw3nnn1enCwcxsa+PiweqSFUCLjPcvAr+Q9HJErJG0L7CoOiaKiOWSPpd0eES8DvSpjnHNbPMcfvjhlLe89rjjjit3/7y8PMaNG1fTYZmZNVguHqwumQ2slTQLGA0MJ/kGpumSBHwCnFyN850HPChpFUmhYmZmZtaguXiwrV5E5KX/XQP8oMzmX6d/MhWmf0r6F2S83mBbOXMNyHg9DTggY/OAsvubmZmZNST+qlYzMzMzM8uKrzxYgyTpBpKvdc00LiJurY14zMzMzOoCFw/WIKVFggsFMzMzs83gZUtmZmZmZpYVFw9mZmZmZpYVFw9mZmZmZpYVFw9mZrbVWbBgAT179qRjx4506tSJ4cOHA9C/f3/2228/unTpwimnnMLy5ctL+8yePZtDDz2UTp06kZ+fz5dffllb4ZuZ1VsuHqzaSBog6Zpy2ttKOqs2YtpckoprOwYzgyZNmjB06FD+9a9/MXnyZEaMGME777zD0Ucfzdtvv83s2bPZd999GThwIABr167l7LPPZuTIkcydO5fCwkKaNm1ay0dhZlb/+NuWLBfaAmcBj9ZyHDVu9Zp1tL3uhdoOo8G4On8tfZ3vnKrpnBcNOh6ANm3a0KZNGwBatGhBx44dWbRoEb169Srd95BDDuGJJ54AYMKECXTp0oUDDkie67jzzjvXWIxmZg2ZrzxYpSRtL+kFSbMkvS3pDElFklql2w+UVJjR5QBJL0uaL+lnadsg4AhJMyVdKek1SV0z5pgkqUt65WJsOf2R1F/SVEmzJf12EzGfk+43S9LYtG0vSRPT9omS9kzbvy3pjXTs35UZJ+s5zazmFBUVMWPGDHr06LFB+4MPPsixxx4LwHvvvYckfvjDH9KtWzduv/322gjVzKze85UH25RjgMURcTyApB2AwZXs3wU4BNgemCHpBeA64JqI6J2O8SnQF7hC0r5As4iYLelHFfTvDOwDHAwIeFbS9yLiH2Unl9QJuAE4LCKWStop3XQP8OeIGCPpfOAPwMnAcOBPEfFnSRdnjNNrM+bsB/QDaNWqNTflr60sn1aNdm2efBJuuVPTOS8sLNzg/erVq7n88su58MILmT59emn7ww8/zPLly9l9990pLCxk3rx5/P3vf2fkyJE0a9aMq6++msaNG9O9e/caizVXiouLN8qL1RznO/ec89yqar5dPNimzAGGSBoMPB8Rr0mqbP9nImI1sFrSKyQn38vL7DMOuFFSf+B8YPQm+h8O9AJmpPvkkZzYb3QiD3wfeCIilgJExKdp+6HAj9LXY4GSjyUPA07NaC8pjHplO2dEjAJGAezZrn0MneO/Vrlydf5anO/cqumcF/UpKH29Zs0aevfuzUUXXcRVV11V2j5mzBjmzp3LxIkT2W677QD4v//7P1avXs1JJ50EwNSpU1m/fj0FBQXUdYWFhfXiOOoK5zv3nPPcqmq+/a+uVSoi3pPUHTgOGChpArCW/y5527Zsl028JyJWSXoJOAn4MXDgJvoLGBgR92YRssqbsxxRwevMcbKds1Tzpo2Zl67ZtppXWFi4wcmm1bxc5TwiuOCCC+jYseMGhcP48eMZPHgwr776amnhAPDDH/6Q22+/nVWrVrHNNtvw6quvcuWVV9Z4nGZmDY3vebBKSdoNWBURDwNDgG5AEVCyFuDUMl1OkrStpJ2BAmAqsAJoUWa/+0mWDk3NuDpQUf8XgfMl5aUx7S5plwpCngj8OO1PxrKlfwJnpq/7AK+nryeVaS+xOXOaWTWbNGkSY8eO5eWXX6Zr16507dqVv/71r1xyySWsWLGCo48+mq5du3LRRRcBsOOOO3LVVVdx0EEH0bVrV7p168bxx7uQNzOrbr7yYJuSD9whaT2wBvgF0Bx4QNKvgTfL7D8FeAHYE/hdRCyW9AmwVtIsYHRE3BUR0yR9ATy0qf7AYkkdgTfSJVPFwNnAx2WDjYi5km4FXpW0jmTZUV/gMuDBdKnUJ8B5aZfLgUclXQ48mTHOhGznNLPqd/jhhxOx8UXB4447rsI+Z599NmeffXZNhmVm1uC5eLBKRcSLJJ/Cl7VvOfsOqGCMNcAPMtvSKxqNgAlldn8vIvqVM8Zwkpubs4l5DDCmTFsRyf0QZff9kOR+iBKDtmROMzMzs4bAy5Ys5ySdQ3LF4oaIWF/b8ZiZmZlZdnzlwXIuIv4M/Lmc9gHZjpHe0zCxnE0/iIhlWx6dmZmZmVXExYPVSWmB0HWTO5rZ/2fvzuOrqO4+jn++siiCRSlCQcSoKCIEUkEBpTS41YobWhdcMA8oaqsC4kL10eJOXZ6qaFXccCtVFJRHK0iVq4JVNtkVedRYQEQBEVJRCPyeP+Yk3Cw3uWS5NyS/9+uVV+aeOXPOb84NL+Y3c2bGOeecqzI+bck555xzzjmXFE8enHPOOeecc0nx5ME555xzzjmXFE8enHPOVYvly5fTp08fOnToQMeOHbn//ujJx+PHj6djx47ssssuzJ49u8g2d955J+3ataN9+/ZMmVLaU6Kdc86lk98w7ZxzrlrUr1+fe++9l8MOO4yNGzfStWtXjjvuODp16sSECRO45JJLitRfsmQJf//731m8eDFfffUVxx57LJ9++in16tVL0x4455wrzq88pImk98PvDEnnpjueeJJywkvc0tH3UEm7x33O24FtR0q6ugpjyZL0L0mLJS2QdHZVte1cXdCqVSsOO+wwAPbYYw86dOjAypUr6dChA+3bty9R/9VXX+Wcc85h1113Zf/996ddu3bMnDkz1WE755wrg195SBMzOzIsZgDnAn9LXzQl5ACLgK/S0PdQ4DnghzT0XdwPwAAzWxaSqTmSppjZ+kQbbNqylYwRr6cuwjpueGY+OT7eKZXMmOeO6luyLDeXjz76iO7duyfcbuXKlfTo0aPwc5s2bVi5cmXFg3XOOVfl/MpDmsSdUR8F/ErSPEnDJNWTdLekWeFs9yWhfrakdyS9KOlTSaMknSdppqSFkg4so6+WkiZKmh9+jgxXPD6W9Fg4s/6mpEaSfgd0A54PMTVK0GaupDvCmfnZkg6TNEXSZ5IuDXUU9mVRiPHsuH2JSXpJ0ieSng91rwRaA9MkTYvr6/YQ9weSWiY5vheHMZwv6eWCqxmSDgztzJJ0S1lXNszsUzNbFpa/Ar4B9k6mf+fcdnl5eZxxxhncd999/OxnP0tYz8xKlEmqztCcc87tIL/ykH4jgKvN7CQASYOB783scEm7AjMkvRnqdgE6AOuAz4HHzewISUOAK4jO2pfmAeAdM+snqR7QBNgLOAjob2YXS3oROMPMnpN0eYhpdoL2Ciw3s56S/gKMBY4CdgMWA48ApxO9yK0L0ByYJendsO0vgY5EVzdmAEeZ2QOSrgL6mNmaUK8x8IGZ3SDpLuBi4LZy4gKYYGaPAUi6DRgEjAbuB+43s3EFSU4yJB0BNAQ+K2XdYGAwQPPme3NTZn6yzbpKatkoOhPuUieZMY/FYoXL+fn5/PGPf6R79+40a9asyLr169czZ84c8vKiHH7z5s288847tGnTBoAFCxZw2GGHFdmmLsrLy6vzY5BKPt6p52OeWpUdb08eap7jgc7hCgBAU6KD/M3ALDNbBSDpM6AgqVgI9CmjzaOBAQBmthX4XtJewBdmNi/UmUM0hWpHTIrrv4mZbQQ2SvpR0p5AL2Bc6HO1pHeAw4ENwEwzWxH2ZV7oe3opfWwGXouL8bgkY+sUkoY9iZKlgse29AROC8t/A+4pryFJrYBngQvNbFvx9WY2BhgD0L59e7vivFOTDNFVViwW46zs7HSHUafsyJibGRdeeCFHHXUU9913X4n1e+65J127dqVbt24A7L333px77rk8+OCDfPXVV6xdu5ZLL720zt8wHYvFyPa/85Tx8U49H/PUqux4e/JQ8wi4wsyKPKNQUjbwU1zRtrjP26jYdxnf3lag1ClKSWwfH0t8PGXNNyjed6L4t9j2uQxl1StuLHCamc2XlANkJ7ldEZJ+BrwO/LeZfVCRNpyrq2bMmMGzzz5LZmYmWVlZANxxxx389NNPXHHFFXz77bf07duXrKwspkyZQseOHTnrrLM49NBDqV+/Pg899FCdTxycc66m8eQh/TYCe1pV47EAACAASURBVMR9ngJcJultM9si6WCgsncMvgVcBtwXpi013sGYKupd4BJJTwPNgN7ANcAhSfS9pow6ydgDWCWpAXAe28fwA+AM4AXgnLIakNQQmAg8Y2bjKxmPc3VOr169Sr2PAaBfv36llt9www3ccMMN1RmWc865SvAbptNvAZAfbuwdBjwOLAHmSloEPErlk7whQB9JC4mm/nQsp/5Y4JGybphO0kSi/ZsPvA1ca2Zfl7PNGOCN+BumK+hG4ENgKvBJXPlQ4CpJM4FWwPdltHEWUcKTE8ZinqSsSsblnHPOObfTUqKzQs7VRuGpS5vMzCSdQ3TDeJXdpNC+fXtbunRpVTXnyuHzZFPPxzz1fMxTy8c79XzMUyt+vCXNMbNuO7K9T1tydU1X4EFFz39cDwxMczzOOeecczsNTx5qEUk3AGcWKx5vZrdXos2JwP7Fiq8rfkN3KlVmP83sPaJHx8a3l0n0NKV4P5lZ4rdZOeecc87VQZ481CLh4LnCiUKCNku/qzGNqno/zWwh0fsonHPOOedcGfyGaeecc84551xSPHlwzjnnnHPOJcWTB+ecc84551xSPHlwzjlX5ZYvX06fPn3o0KEDHTt25P777wdg3bp1HHfccRx00EEcd9xxfPfddwB899139OvXj86dO3PEEUewaNGidIbvnHMuAU8enHPOVbn69etz77338vHHH/PBBx/w0EMPsWTJEkaNGsUxxxzDsmXLOOaYYxg1ahQAd9xxB1lZWSxYsIBnnnmGIUOGpHkPnHPOlcaThzSR9H74nSHp3HTHE09SjqTWaep7aHiRW8HnvB3YdqSkq6s4nsmS1kt6rSrbda62a9WqFYcddhgAe+yxBx06dGDlypW8+uqrXHjhhQBceOGFvPLKKwAsWbKEY445BoBDDjmE3NxcVq9enZ7gnXPOJeSPak0TMzsyLGYA5wJ/S180JeQAi4Cv0tD3UOA54Ic09F2au4HdgUuSqbxpy1YyRrxevRG5QsMz88nx8U6p8sY8d1TfkmW5uXz00Ud0796d1atX06pVKyBKML755hsAunTpwoQJE+jVqxczZ87kyy+/ZMWKFbRs2bJ6dsQ551yFePKQJpLyzKwJMAroIGke8DTwQCjLBnYFHjKzRyVlAzcDq4neSTABWAgMARoBp5nZZwn6agk8AhwQii4jSgzeAKYDRwIrgVOBvkA34HlJm4CeZraplDZziRKePkADYDBwJ9AOuNvMHglvcb4L+C1gwG1m9kLYl5HAGqATMAc4H7gCaA1Mk7TGzPqEvm4HTgI2AaeaWbmnIyVdHGJqCPwfcIGZ/SDpQOB5oF7Y/6vC91AqM3srxFtWX4NDXzRvvjc3ZeaXF56rIi0bRQezLnXKG/NYLFbk86ZNmxgyZAgXXXQRc+fOJT8/v0idgs9HHXUUDz74IO3ateOAAw6gXbt2fPTRR2zcuLGa9mTnkZeXV2JcXfXx8U49H/PUqux4e/KQfiOAq83sJCg8EP3ezA6XtCswQ9KboW4XoAOwDvgceNzMjpA0hOjAe2iCPh4A3jGzfpLqAU2AvYCDgP5mdrGkF4EzzOw5SZeHmGaXE/tyM+sp6S/AWOAoYDdgMVGycjpRotMFaA7MkvRu2PaXQEeiJGYGcJSZPSDpKqCPma0J9RoDH5jZDZLuAi4GbisnLoAJZvYYgKTbgEHAaOB+4H4zGyfp0iTaKZeZjQHGALQ9oJ3du9D/WaXK8Mx8fLxTq7wxzz0vu3B5y5YtnHTSSVx66aVcddVVAOyzzz60b9+eVq1asWrVKlq3bk12drRN377RVQszY//99+ess87iZz/7WbXty84iFosVjpGrfj7eqedjnlqVHW//X7fmOR7oLOl34XNTooP8zcAsM1sFIOkzoCCpWEh0BSCRo4EBAGa2Ffhe0l7AF2Y2L9SZQzSFakdMiuu/iZltBDZK+lHSnkAvYFzoc7Wkd4DDgQ3ATDNbEfZlXuh7eil9bAYK7jeYAxyXZGydQtKwJ1GyNCWU9wROC8t/A+5Jsr2kNGpQj6WlTNtw1SMWixU5WHXVL9kxNzMGDRpEhw4dChMHgFNOOYWnn36aESNG8PTTT3PqqacCsH79enbffXcaNmzI448/Tu/evT1xcM65GsiTh5pHwBVmNqVIYTR15qe4om1xn7dRse8yvr2tRNOfKrJ9fCzx8WgH+k4U/xYzsyTqFTeWaCrXfEk5RNPAnHMpMmPGDJ599lkyMzPJysoCoicqjRgxgrPOOosnnniCtm3bMn78eAA+/vhjBgwYQL169Tj00EN54okn0hm+c865BDx5SL+NwB5xn6cAl0l628y2SDqY6H6EyniL6D6H+8K0pcY7GFNFvQtcIulpoBnQG7gGOCSJvteUUScZewCrJDUAzmP7GH4AnAG8AJxTyT6ccwn06tWL7Xl/UW+99VaJsp49e7Js2bLqDss551wl+aNa028BkC9pvqRhwOPAEmCupEXAo1Q+yRsC9JG0kGjqT8dy6o8FHpE0T9KOXo2IN5Fo/+YDbwPXmtnX5WwzBnhD0rRK9AtwI/AhMBX4JK58KHCVpJlAK+D7shqR9B4wHjhG0gpJv6lkXM4555xzOy2/8pAmBU/4MbMtwDHFVl8ffuLFwk/B9tlxy0XWldLXaqInKRXXKa7OPXHLLwMvlxN/RtzyWKKEo8Q6oisN1xTbtki8ZnZ53PJoohubCz43iVt+CXipjJhGxi0/DDxcSrWVQA8zM0nnAGXeFG5mvyprvXPOOedcXeLJg6trugIPhsfIrgcGpjke55xzzrmdhicPtYikG4AzixWPN7PbK9HmRGD/YsXXFb+hO5Uqs59m9h7Ro2Pj28sEni1W9Scz616pQJ1zzjnnahlPHmqRcPBc4UQhQZv9qrK9qlDV+2lmC4neR+Gcc84558rgN0w755xzzjnnkuLJg3POOeeccy4pnjw455wr18CBA2nRogX/9V//VVg2f/58evbsSWZmJieffDIbNmwoXLdgwQJ69uxJx44dyczM5Mcff0xH2M4556qYJw/OOefKlZOTw+TJk4uUXXTRRYwaNYqFCxfSr18/7r77bgDy8/M5//zzeeSRR1i8eDGxWIwGDRqkI2znnHNVrNYnD5JGSrq6jPWnSTq0gm1fKmlAWM6R1LqicaabpFskHRuWh0raPd0xFZCUJenEcurkSHqwCvvcV9I0SR9LWixpSFW17dzOqHfv3jRr1qxI2dKlS+nduzcAxx13HC+/HL0e5s0336Rz58506RI92OznP/859erVS23AzjnnqoU/bQlOA14jeqvzDjGzR+I+5gCLgK+qJqzUMrOb4j4OBZ4DfkhTOMVlAd2Af6Swz3xguJnNlbQHMEfSVDMr8+9k05atZIx4PTUROoZn5pPj412tckf1TbiuU6dOTJo0iVNPPZXx48ezfPlyAD799FMk8Zvf/IZvv/2Wc845h2uvvTZVITvnnKtGtfLKg6QbJC2V9E+gfSi7WNIsSfMlvSxpd0lHAqcAd0uaJ+nA8DNZ0hxJ70k6pIx+Rkq6WtLviA5unw/tNJLUVdI7oZ0pklqFbWKS/iLp3XBW+3BJEyQtk3RbOfv1SmhvsaTBoewySXfF1cmRNDos3yjpE0lTJY0r5wrMWEm/k3Ql0BqYJmlaWHe8pH9JmitpvKQmoTxX0h1h3WxJh4V9/UzSpeXsy7WSFobvY1Tc2PxZ0kxJn0r6laSGwC3A2WFszy6r3dDOyZI+lPSRpH9KahnK9w5jMVfSo5K+lNS8tDbMbJWZzQ3LG4GPgX3K69u5uuTJJ5/koYceomvXrmzcuJGGDRsC0bSl6dOn8/zzzzN9+nQmTpzIW2+9leZonXPOVYVad+VBUlfgHOCXRPs3F5gDTDCzx0Kd24BBZjZa0iTgNTN7Kax7C7jUzJZJ6g78FTi6rD7N7CVJlwNXm9lsSQ2A0cCpZvZtOOC9ne1vM95sZr3DVJhXid56vA74TNJfzGxtgq4Gmtk6SY2AWZJeBl4C/gUUnNY7G7hdUjfgjFLGoUxm9oCkq4A+ZrYmHFz/N3Csmf1H0nXAVUQH9ADLzaynpL8AY4GjgN2AxcAjJXsASb8luuLT3cx+kBQ/F6K+mR0Rpin9ycyOlXQT0M3MLi8v/mA60MPMTNJFYWyGA38C3jazOyWdAAxOpjFJGUTj+GGC9YML2mrefG9uysxPMkxXWS0bRVcfXPWJxWKFy19//TXbtm0rUnb99dcDsHz5clq0aEEsFmPDhg20b9+eRYsWAdChQwfGjx/vU5cqKC8vr8iYu+rl4516PuapVdnxrnXJA/ArYKKZ/QAQkgOATiFp2BNoApR4Q3I4o34kMF5SQfGuFYihPdAJmBraqQesiltfENNCYLGZrQr9fw7sCyRKHq6UVPDStn2Bg8zsA0mfS+oBLAt9zwCGAK+a2abQ9v9WYD8AegCHAjPCvjQkSlZK25cm4Sz9Rkk/StrTzNaX0uaxwFMF35GZrYtbNyH8ngNkVDDmNsAL4WpPQ+CLUN4L6Bf6nCzpu/IaCn8TLwNDzWxDaXXMbAwwBqB9+/Z2xXmnVjBst6NisRhnZWenO4w6Izc3l1122YXsMObffPMNLVq0YNu2beTk5HDNNdeQnZ1Nly5dOOaYYzjiiCNo2LAht912G8OGDSvczu2YWCzmY5dCPt6p52OeWpUd79qYPABYKWVjgdPMbL6kHCC7lDq7AOvNrLJvGxZRUtAzwfqfwu9tccsFn0v9TiRlEx109wxn62NEZ/gBXgDOAj4hSpxMcdlPJQmYamb9E6zf4X0JbZb2HcW3t7WM7cszGvgfM5sUxm1kXL9JC1eQXgaeN7MJ5dV3rjbr378/sViMb7/9ljZt2nDzzTeTl5fHQw89BMDpp59e+BjXvfbai6uuuorDDz8cSZx44on07Zv43gnnnHM7j9qYPLwLjA3z6OsDJwOPAnsAq8IB4XnAylB/Y1iHmW2Q9IWkM81sfDgA72xm85Pot7AdYCmwt6SeZvav0OfBZra4EvvVFPguJA6HEF0RKDABuAH4ErgulE0HHpV0J9E49AUeS7Kvgn1ZA3wAPCSpnZn9n6KnMLUxs08rsS9vAjdJ+lvBtKViVx8SxZOspmz/fi+MK59OlGT9WdLxwF6JGgjf/RPAx2b2PzvQt3O10rhx44CSZ6yGDCn9QWTnn38+559/fipCc845l0K17obpcJPrC8A8orPG74VVNxLNWZ9KdIa+wN+Ba8LNtQcSJRaDJM0nmref7ByUscAjkuYRTVP6HdFB6vwQy5GV2S9gMlBf0gLgVqKDegDM7Duip0XtZ2YzQ9ksoilF84mSi9nA90n2NQZ4Q9I0M/uW6ElS40LfHwAJbyJPhplNDrHNDuOV8EbuYBpwaLI3TBNdaRgv6T2iBKjAzcDxkuYCvyWaSrYxQRtHARcAR4d+56mcx8U655xzztV2Mks0e8Tt7CQ1MbO8cLXgXWBwwROE6iJJuwJbzSxfUk/g4SqYolZE+/btbenSpVXZpCuDz5NNPR/z1PMxTy0f79TzMU+t+PGWNMfMuu3I9rVx2pLbboyiF+DtBjxdlxOHoC3woqRdgM3AxWmOxznnnHNup+LJQxIk3QCcWax4vJndXg19/Rwo7YHox5TxCNdSmdm5pbT/ENGUnHj3m9lTO9J2MiRlAs8WK/7JzLpXos3/InqSVLwZZvaH8rY1s2VEj1yNb6/Kxts555xzrrbz5CEJIUmo8kQhQV9rid6oXF3tl3uQXYV9LaSK9yUkOVWW6FT3eDvnnHPO1Sa17oZp55xzzjnnXPXw5ME555xzzjmXFE8enHPOOeecc0nx5ME55+q4gQMH0qJFCzp16lRYNm/ePHr06EFWVhbdunVj5syZhetisRhZWVl07NiRX//61+kI2TnnXJp48uCcc3VcTk4OkydPLlJ27bXX8qc//Yl58+Zxyy23cO211wKQl5fH73//eyZNmsTixYsZP358OkJ2zjmXJjU+eZA0UlLCNxBLOi28yyAVsVyfin5SRVKOpAerod0yv7MKtDc0vOiurDq5kppXYZ+9Jc2VlC/pd1XVrnM1Ue/evWnWrFmRMkls2LABgO+//57WrVsD8M9//pPTTz+dtm3bAtCiRYvUBuuccy6tasOjWk8DXgOWpKCv64E7UtCPK2oo8BzwQwr7/DeQA+xQErRpy1YyRrxeLQG5koZn5pPj411huaP6Jlx333338Zvf/Iarr76abdu28f777wOwYsUKWrZsSXZ2Nhs3bmTIkCEMGDAgVSE755xLsxqZPISXsg0AlgPfAnMkXQwMBhoC/wdcQPR8/lOAX0v6b+CM0MRDwN5EB5sXm9knCfppCTwCHBCKLjOz9yW9AuxL9Gbm+81sjKRRQCNJ84DFZnZegjZL2/YyYH8zuzbUyQG6mtkVkm4Ezgv7ugaYY2b3lNJuC+ANM+sqqQswD9jPzP4t6TMgE2gc9qdt2Gyomc2Q1BgYHerUB0aa2avF2u8L/DdwMqAE7YwMZQeE3/eZ2QNh+xLfWWnjE+q2C+3vDWwlegHfvsDIMAadwvbnA1cArYFpktaYWZ9E7ca1X+I7COWDgOuAr4BlRC+su7y0NswsN2yzLYn+BhP9bdK8+d7clJlf3iauirRsFCUQrmJisVjh8tdff81//vOfwrIHHniAQYMG8etf/5pp06Zx+umnc++99/Ljjz8ybdo07r33XjZv3swf/vAHJLHvvvumZyfqgLy8vCLflatePt6p52OeWpUdb5lZ1UVTBSR1BcYC3YkOdOcSHWg+VfDGX0m3AavNbLSkscBrZvZSWPcWcKmZLZPUHbjTzI5O0NcLwL/M7D5J9YAmZva9pGZmtk5SI2AW8GszWyspz8yalBN/iW2Jpof9y8zahTpvEL107kfgcaBn3L4+WlryELZbHOoOAC4E7gOmA383s56S/gb81cymS2oLTDGzDpLuAJaY2XOS9gRmEr1p+UygG9Eblq8CTjGz78poZyRwPNAH2ANYCvwC6Fzad1bGfnwIjDKziZJ2C+NzBPAq0JHo4H4GcE2IIRfoZmZryhj3wjoJvoNdgfeBw4CNwNvA/ETJQ1y7Y4n7+ypP2wPa2S5n3Z9MVVcFhmfmc+/CGnkOZKcQf+UhNzeXk046iUWLFgHQtGlT1q9fjyTMjKZNm7JhwwYGDx5M69atGTlyJACDBg3ihBNO4Mwzz0zHLtQJsViM7OzsdIdRZ/h4p56PeWrFj7ekOWbWbUe2r4n/6/4KmGhmPwBImhTKO4WkYU+gCTCl+IaSmgBHAuMlFRTvWkZfRxMdiGNmW4HvQ/mVkvqF5X2Bg4C1ScZfYlsz+0DS55J6EJ3xbk90cDwEeNXMNoX4/7ectt8HjgJ6E02fOoHoKsF7Yf2xwKFx+/4zSXsQHfCfEncfwm5sv6rQhyiBON7MNpTTDsDrZvYT8JOkb4CWJP7OSgjt7GNmEwHM7MdQDjDTzFaEz/OADKLkaEeV9v39AnjHzNaF9scDB1eg7TI1alCPpWVMBXFVKxaLkXtedrrDqJVat27NO++8Q3Z2Nm+//TYHHXQQAEcddRTPPPMM+fn5bN68mQ8//JBhw4alOVrnnHOpUhOTB4DSLoeMBU4zs/lh2k92KXV2AdabWVZFO5aUTXTw3NPMfpAUIzrYruy2LwBnAZ8QHWib4o7Ok/Qe0YH6fkRn6a8jGqvXwvpdQt+bisUl4AwzW1qsvDvwOdE0pIOB2eW0A/BTXNFWtv8NJXsJq6x9TtR20sr4DnZ0rJ2rM/r3708sFmPNmjW0adOGm2++mccee4whQ4aQn5/PbrvtxpgxYwDYb7/9OOGEE+jcuTO77LILF110UZFHvDrnnKvdauLTlt4F+klqFM5SnxzK9wBWSWpAdI9AgY1hHeHM+ReSzoTooDncH5DIW8BloW49ST8DmgLfhQPPQ4AecfW3hP4TKWvbCUQ3d/cnSiQgOqt+sqTdwlWT8k5Zv0t0H8AyM9sGrANOJLqKAfAmUDgNR1JBEjUFuKIgWZH0y7g2vwROB56R1LGcdsqKq7TvrITwHa2QdFpoe9fynqRE3HechETfwUyie2P2klSf7ffHOFfnjRs3jlWrVrFlyxZWrFjBoEGD6NWrF3PmzGH+/Pl8+OGHdO3atbD+Nddcw5IlS1i0aBFDhw5NY+TOOedSrcYlD2Y2l+jgeh7wMtun5NwIfAhMJTp7X+DvwDWSPpJ0IFFiMUjSfGAxcGoZ3Q0B+khaSHSDbkdgMlBf0gLgVuCDuPpjgAWSnk/QXsJtzew7oidC7WdmM0PZLGASMJ8ouZjN9qlTJRTcxEt0sA5R8rE+tA1wJdBN0gJJS4BLQ/mtQIMQ+6LwOb7dpUTjNj6MYaJ2EsWV6DtL5AKiqUULiKZi/aKc+mOANyRNK6ceJPgOzGwl0VSvD4F/En0XCcda0uGSVhDdF/JouN/EOeecc65Oq3E3TNc1kpqYWV44+/4uMDgcjLsqFjfW9YGJwJMF915Ulfbt29vSpUvLr+iqhN9kl3o+5qnnY55aPt6p52OeWrXxhum6Zoyil9ztBjztiUO1GinpWKKxfhN4Jc3xOOecc87tVOpE8qDoHQTFnyM43sxur2B7Pye6X6K4YwoeJ5ssMzu3lPYfInqqUrz7zeypHWk73apjP8JjXos/QesCM1tY3rZmVuKFb1X9t+Gcc845V5vVieQhHAhW2cFgSBAq/ESnJNr/Q3W1nUrVsR9m1r2K26vSvw3nnHPOudqsxt0w7ZxzzjnnnKuZPHlwzjnnnHPOJcWTB+ecqyUGDhxIixYtiry07eyzzyYrK4usrCwyMjLIyopmXK5du5Y+ffrQpEkTLr/88kRNOuecc0XUiXsenHOuLsjJyeHyyy9nwIABhWUvvPBC4fLw4cNp2rQpALvtthu33norixYtYtGiRSmP1Tnn3M5pp7jyIGmkpBJPyolbf1p43GkqYrk+Ff2kiqQcSQ8mUS8vFfEk6DtL0onl1ElqP3aw3yclfRNerOdcjde7d2+aNWtW6joz48UXX6R///4ANG7cmF69erHbbrulMkTnnHM7udpy5eE04DWitwZXt+uJ3lTsUicL6Ab8I8X9jgUeBJ5JdoNNW7aSMeL1agvIFTU8M58cH29yR/Utt857771Hy5YtOeigg1IQkXPOudqqxl55kHSDpKWS/gm0D2UXS5olab6klyXtLulI4BTgbknzJB0YfiZLmiPpPUmHlNFPS0kTQ5vzQ3tIeiVsv1jS4FA2CmgU+nm+jDZL2/YySXfF1cmRNDos3yjpE0lTJY1LdJVFUgtJc8JyF0kmqW34/FkYj73D2MwKP0eF9Y3DmfRZkj6SdGop7feV9C9JzSXtH5ZnSbo1rk4TSW9JmitpYUE7km6VNCSu3u2SrixjjK4N288P44qkmKQ/S5op6VNJv5LUELgFODuM+9mJ2oxr+2RJH4b9/KeklqF87zDGcyU9KulLSc0TtWNm7wLryuvPuZ3BuHHjCq86OOeccxVVI688SOoKnAP8kijGucAcYIKZPRbq3AYMMrPRkiYBr5nZS2HdW8ClZrZMUnfgr8DRCbp7AHjHzPpJqgc0CeUDzWydpEbALEkvm9kISZebWXnveCixLfAS8C/g2lDnbOB2Sd2AM0rZ1xLM7BtJu0n6GfArYDbwK0nTgW/M7AdJjwN/MbPpIbGYAnQAbgDeNrOBkvYEZobErGDM+wFXASea2XeSngQeNrNnJMW/r+FHoJ+ZbQgH3h+E8X8CmADcL2kXou/viNL2Q9Jvia4WdQ8xx8+zqG9mRyiapvQnMztW0k1ANzNL9q7O6UAPMzNJFxGN+XDgT2EM7pR0AjA4yfbKFBLEwQDNm+/NTZn5VdGsS0LLRtHVh7ouFosVLn/99df85z//KVK2detWXnjhBR599NEi5QCffPIJK1euLFGeSF5eXtJ1XdXwMU8tH+/U8zFPrcqOd41MHogOjCea2Q8A4eAUoFNIGvYkOsifUnxDSU2AI4HxkgqKi7+RON7RwAAAM9sKfB/KrwwH1AD7AgcByb49usS2ZvaBpM8l9QCWEV1NmQEMAV41s00h/v8tp+33id7a3Jto+tQJgID3wvpjgUPj9v1nkvYAjgdOibuqsRvQNiz3IZoWdLyZbQhlRxElNQDPAn8OywLukNQb2AbsA7Q0s1xJayX9EmgJfFTG27aPBZ4q+H7NLP7s/oTwew6QUc5YJNIGeEFSK6Ah8EUo7wX0C31OlvRdBdsvwszGAGMA2rdvb1ecV+KijqsmsViMs7Kz0x1GjZKbm0vjxo3JjhuXyZMnk5mZyZlnFn+ZelQ/Ly+vSP2yxGKxpOu6quFjnlo+3qnnY55alR3vmpo8AFgpZWOB08xsvqQcILuUOrsA65O4OpCQpGyiA9ye4cx4jOhgu7LbvgCcBXxClByZ4o7yk/QeUXK1H/AqcB3RWL0W1u8S+t5ULC4BZ5jZ0mLl3YHPgQOAg4muZhQo7Ts4D9gb6GpmWyTlxu3f40AO8AvgyTL2QQnaBvgp/N5Kxf8+RwP/Y2aTwvcxMq5f52qt/v37E4vFWLNmDW3atOHmm29m0KBB/P3vfy91ylJGRgYbNmxg8+bNvPLKK7z55pscemhKnj3hnHNuJ1VT73l4F+gnqVE4a35yKN8DWCWpAdFBbIGNYR3hzPkXks6E6KBZUpcy+noLuCzUrRemBDUFvgsH/4cAPeLqbwn9J1LWthOIpuv0J0okIJpic3KYjtQEKO/Ox3eB84FlZraNaE7+iURXMQDeBAqn90gqSKKmAFcUJCvhCkGBL4HTgWckdQxlM4imHkHRsW5KNEVqi6Q+RElMgYlEV0IOp5SrQnHeBAZK2j3EUvrjYbYr/H6T1BRYGZYvjCufTpS8Iel4YK8daNO5Gm/cuHGsWrWKLVu2sGLFCgYNGgTA2LFjufTSS0vU7pk68gAAIABJREFUz83NZd26deTl5bFixQpPHJxzzpWrRiYPZjaX6OB6HvAy26fk3Ah8CEwlOntf4O/ANeEG2QOJDnYHSZoPLAbKmkcyBOgjaSHRVJmOwGSgvqQFwK3AB3H1xwALlPiG6YTbmtl3RE+E2s/MZoayWcAkYD5RcjGb7VOnSjCz3LD4bvg9nehKS8EUnCuBbpIWSFoCFBwx3Ao0CLEvCp/j211KNG7jwxgOAf4gaRbRwXiB50P7s0P9T+La2AxMA14MU8AS7cPksM+zJc0DEj6GN5hGNBUrqRumia40jJf0HrAmrvxm4HhJc4HfAquIEpNSSRpHdJ9Ke0krJA1Kom/nnHPOuVpLZolmj7hUkdTEzPLCmfh3gcEhgdqphBul5wJnmtmydMdTnKRdga1mli+pJ9EN4RWe3laa9u3b29KlS8uv6KqEz5NNPR/z1PMxTy0f79TzMU+t+PGWNMfMuu3I9jX5noe6ZIyil9ztBjy9kyYOhxLddzGxJiYOQVvgxZDkbAYuTnM8zjnnnHM7lTqTPEi6ASj+qJHxZnZ7Bdv7OdH9EsUdU8ZThkplZueW0v5DRE88ine/mT21I22nipktIbrpupCkTKInNcX7ycy6V7QfSf9FNKUq3gwz+0Np9YvFuIzokbjx7VXZ9+icc845V9vVmeQhJAkVShQStLeW6M3H1SKZg+GazswWUsVjFJKnKkugqvt7dM4555yrTWrkDdPOOeecc865mseTB+ecc84551xSPHlwzjnnnHPOJcWTB+ecqyEGDhxIixYt6NSpU2HZyJEj2WeffcjKyiIrK4t//OMfAMycObOwrEuXLkycODFdYTvnnKtDPHlwzrkaIicnh8mTJ5coHzZsGPPmzWPevHmceOKJAHTq1InZs2czb948Jk+ezCWXXEJ+fn6qQ3bOOVfHePKQJpLeD78zJJV4VGs6ScqR1DpNfQ8NL8sr+Jy3A9uOlFTe26p3JJb9JM0Jb7ZeLOnS8rdyruJ69+5Ns2bNkqq7++67U79+9MC8H3/8EUnVGZpzzjkH1KFHtdY0ZnZkWMwAzgX+lr5oSsgBFgFfpaHvocBzwA9p6Lu4VcCRZvaTpCbAIkmTzCzhuGzaspWMEa+nLsI6bnhmPjk7+Xjnjupbbp0HH3yQZ555hm7dunHvvfey1157AfDhhx8ycOBAvvzyS5599tnCZMI555yrLjKzdMdQJ0nKM7Mmkj4AOgBfAE8DDwCjgGxgV+AhM3tUUjZwM7Ca6L0EE4CFRC9MawScZmafJeirJfAI21/idhlRYvAGMB04ElgJnAr0BcaGz5uAnma2qZQ2c4kSnj5AA2AwcCfQDrjbzB5RdCr0LuC3gAG3mdkLYV9GAmuATsAc4HzgCuAeYCmwxsz6hCsP9wMnhXhONbPVCfZzJJBnZvdIujjE1BD4P+ACM/tB0oHA80C9sP9XmVmT0tor1vbPgY+AHsWTB0mDQ180b75315vue6y85lwVadkIVpf469y5ZO7TtMjnr7/+mj/+8Y889VT0OpN169bRtGlTJPHkk0+ydu1arrvuuiLbfPnll4waNYr777+fhg0bVmu8eXl5NGlS7j8ZV4V8zFPLxzv1fMxTK368+/TpM8fMuu3I9n6aKv1GAFeb2UlQeCD6vZkdLmlXYIakN0PdLkSJxjrgc+BxMztC0hCiA++hCfp4AHjHzPpJqgc0AfYCDgL6m9nFkl4EzjCz5yRdHmKaXU7sy82sp6S/ECUcRwG7AYuJkpXTiRKdLkBzYJakd8O2vwQ6EiUxM4CjzOwBSVcBfcxsTajXGPjAzG6QdBdwMXBbOXEBTDCzxwAk3QYMAkYTJSL3m9m4ZKYhSdoXeJ0oKbqmtKsOZjYGGAPQ9oB2du9C/2eVKsMz89nZxzv3vOyin3Nzady4MdnZ2SXqHnDAAZx00kmlrhs7dizNmjWjW7cd+j9gh8VisVL7d9XHxzy1fLxTz8c8tSo73jv3/7q10/FAZ0m/C5+bEh3kbwZmmdkqAEmfAQVJxUKiKwCJHA0MADCzrcD3kvYCvjCzeaHOHKIpVDtiUlz/TcxsI7BR0o+S9gR6AeNCn6slvQMcDmwAZprZirAv80Lf00vpYzPwWlyMxyUZW6eQNOxJlCxNCeU9gdPC8t+IrnQkZGbLib6P1sArkl5KdOUDoFGDeixNYhqKqxqxWKzEwXdts2rVKlq1agXAxIkTC5/E9MUXX7DvvvtSv359vvzyS5YuXUpGRkYaI3XOOVcXePJQ8wi4wsymFCmMpvr8FFe0Le7zNir2Xca3t5Vo+lNFto+PJT6esu7gLN53ovi32Pa5dWXVK24s0VSu+ZJyiKaBVZiZfSVpMfAr4KXKtOVcIv379ycWi7FmzRratGnDzTffTCwWY968eUgiIyODRx99FIDp06czatQoGjRowC677MJf//pXmjdvnuY9cM45V9t58pB+G4E94j5PAS6T9LaZbZF0MNH9B5XxFtF9DveFaUuNdzCminoXuETS00AzoDdwDXBIEn2vKaNOMvYAVklqAJzH9jH8ADgDeAE4p6wGJLUB1prZpnCl5ijgfyoZl3MJjRs3rkTZoEGDSq17wQUXcMEFF1R3SM4551wR/qjW9FsA5EuaL2kY8DiwBJgraRHwKJVP8oYAfSQtJJr607Gc+mOBR8IjSnf0akS8iUT7Nx94G7jWzL4uZ5sxwBuSplWiX4AbgQ+BqcAnceVDgaskzQRaAd+X0UYH4ENJ84F3gHvMbGEl43LOOeec22n5lYc0KXjCj5ltAY4ptvr68BMvFn4Kts+OWy6yrpS+VhM9Sam4TnF17olbfhl4uZz4M+KWxxIlHCXWEV1puKbYtkXiNbPL45ZHE93YXPC5SdzyS5QxZcjMRsYtPww8XEq1lURPTDJJ5wAJbwo3s6lA50TrnXPOOefqGk8eXF3TFXgwPEZ2PTAwzfE455xzzu00PHmoRSTdAJxZrHi8md1eiTYnAvsXK76u+A3dqVSZ/TSz94geHRvfXibwbLGqP5lZ90oF6pxzzjlXy3jyUIuEg+cKJwoJ2uxXle1Vharez3AfQ1ZVteecc845V1v5DdPOOeecc865pHjy4JxzzjnnnEuKJw/OOZcmAwcOpEWLFoVvjY53zz33IIk1a6JXnnz33Xf069ePzp07c8QRR7Bo0aJUh+ucc8558uCcc+mSk5PD5MmTS5QvX76cqVOn0rZt28KyO+64g6ysLBYsWMAzzzzDkCFDUhmqc845B3jykDaS3g+/MySdm+544knKkdQ6TX0PlbR73Oe8Hdh2pKSrqzietpLelPSxpCWSMqqyfVe39e7dm2bNmpUoHzZsGHfddRfRE4UjS5Ys4ZhjolfCHHLIIeTm5rJ69eqUxeqcc86BP20pbczsyLCYAZwL/C190ZSQAywCvkpD30OB54Af0tB3aZ4BbjezqZKaANvKqrxpy1YyRryemsgcwzPzydkJxzt3VN+E6yZNmsQ+++xDly5FnihMly5dmDBhAr169WLmzJl8+eWXrFixgpYtW1Z3uM4551whv/KQJnFn1EcBv5I0T9IwSfUk3S1plqQFki4J9bMlvSPpRUmfShol6TxJMyUtlHRgGX21lDRR0vzwc2S44vGxpMckLQ5n1xtJ+h3QDXg+xNQoQZu5ku6Q9C9JsyUdJmmKpM8kXRrqKOzLohDj2XH7EpP0kqRPJD0f6l4JtAamSZoW19ftIe4PJCV1pCTp4jCG8yW9XHA1Q9KBoZ1Zkm4p68qGpEOB+uFN05hZnpnVlKTG1UI//PADt99+O7fcckuJdSNGjOC7774jKyuL0aNH88tf/pL69f38j3POudSSmaU7hjpJUp6ZNZGUDVxtZieF8sFACzO7TdKuwAyiF6LtB7wCdADWAZ8Dj5vZnyQNAfY3s6EJ+noB+JeZ3SepHtAE2Av4P6Cbmc2T9CIwycyekxQLMc0uI/5c4M9m9rCkvwDHAEcBuwGLzayFpDOAS4ETgObALKA70B54FehIdHVjBnCNmU0P7XYzszWhHwNOMbP/lXQXsMHMbksQ00ggz8zukfRzM1sbym8DVpvZaEmvAc+b2biQ5NxjZk0StHcacBGwmehFef8ERpjZ1mL1BgODAZo337vrTfc9lmjYXBVr2QhWb0p3FDsuc5+mhctff/01f/zjH3nqqaf4/PPPGT58OLvuuisA3377Lc2bN+fhhx8uMr3JzOjfvz9PPPEEjRs3TmnseXl5NGlS6j8ZV018zFPLxzv1fMxTK368+/TpM8fMuu3I9n7aquY5HugcrgAANAUOIjqAnWVmqwAkfQa8GeosBPqU0ebRwACAcOD7vaS9gC/MbF6oM4doCtWOmBTXfxMz2whslPSjpD2BXsC40OdqSe8AhwMbgJlmtiLsy7zQ9/RS+tgMvBYX43FJxtYpJA17EiVLBW/E7gmcFpb/BtxTRhv1gV8BvwT+DbxANKXrifhKZjYGGAPQ9oB2du9C/2eVKsMz89kZxzv3vOzty7m5NG7cmOzsbLKzsxk4cGDhuoyMDGbPnk3z5s1Zv349u+++Ow0bNuSxxx7j+OOPp2/fxNOfqkssFiM7O7vceq7q+Jinlo936vmYp1Zlx3vn+1+39hNwhZlNKVIYXaH4Ka5oW9znbVTsu4xvbytQ6hSlJLaPjyU+HpXYInHfieLfYtsvj5VVr7ixwGlmNl9SDpCd5HbxVgAfmdnnAJJeAXpQLHmI16hBPZaWMZ/dVa1YLFbkQHxn079/f2KxGGvWrKFNmzbcfPPNDBo0qNS6H3/8MQMGDKBevXoceuihPPFEwj9D55xzrtp48pB+G4E94j5PAS6T9LaZbZF0MLCykn28BVwGFExbKm+eQ/GYKupd4BJJTwPNgN7ANcAhSfS9ppJ97wGsktQAOI/tY/gBcAbRVYRzymljFrCXpL3N7FuiKzgJp3I5t6PGjRtX5vrc3NzC5Z49e7Js2bJqjsg555wrm98wnX4LgPxwY+8w4HFgCTBX0iLgUSqf5A0B+khaSDT1p2M59ccCj5R1w3SSJhLt33zgbeBaM/u6nG3GAG/E3zBdQTcCHwJTgU/iyocCV0maCbQCvk/UQJhudTXwVhg7AX5Dg3POOefqLL/ykCYFN+ma2Raim43jXR9+4sXCT8H22XHLRdaV0tdq4NRSVnWKq3NP3PLLwMvlxJ8RtzyWKOEosY7oSsM1xbYtEq+ZXR63PBoYHfe5SdzyS8BLZcQ0Mm75YeDhUqqtBHqYmUk6h3KuJIQnLXUuq45zzjnnXF3hyYOra7oCDyp6+9Z6YGA59Z1zzjnnXODJQy0i6Qaix7rGG29mt1eizYlEjymNd13xG7pTqTL7aWbvAUXeviUpE3i2WNWfzKx7pQJ1zjnnnKtlPHmoRcLBc4UThQRt9qvK9qpCVe+nmS0EsqqqPeecc8652spvmHbOOeecc84lxZMH55xzzjnnXFI8eXDOOeecc84lxZMH55yrRgMHDqRFixZ06tSpxLp77rkHSaxZE70T8fnnn6dz58507tyZI488kvnz56c6XOecc65Mnjw451w1ysnJYfLkySXKly9fztSpU2nbtm1h2f77788777zDggULuPHGGxk8eHAqQ3XOOefK5cmD26lIypXUvJrabi2p1JfQSYpJ6lYd/brarXfv3jRr1qxE+bBhw7jrrruIXjkSOfLII9lrr70A6NGjBytWrEhZnM4551wy/FGtzgVm9hXwu8q0sWnLVjJGvF5FEbnyDM/MJ6eGjnfuqL4J102aNIl99tmHLl26JKzzxBNP8Nvf/rY6QnPOOecqzJMHV2NJagy8CLQB6gG3hlVXSDoZaACcaWafSGoGPAkcAPwADDazBZJGAgcC+wD7AneZ2WMJ+ssAXjOzTpIaAU8BhwIfA43KiHMwMBigefO9uSkzvzK77XZAy0ZRAlETxWKxwuWvv/6a//znP8RiMX788Ueuu+467r777sLPM2bMoGnTpoX1P/roI0aPHs0DDzxQpJ2aIC8vr8bFVNv5mKeWj3fq+ZinVmXH25MHV5OdAHxlZn0BJDUF/gysMbPDJP0euBq4CLgZ+MjMTpN0NPAM21/81hnoATQGPpL0erjKUJbLgB/MrLOkzsDcRBXNbAwwBqDtAe3s3oX+zypVhmfmU1PHO/e87O3Lubk0btyY7OxsFi5cyNq1a7n88ssBWLNmDVdccQUzZ87kF7/4BQsWLODBBx9k6tSpHHzwwWmKPrFYLEZ2dna6w6hTfMxTy8c79XzMU6uy410z/9d1LrIQuEfSn4muCLwX5odPCOvnAKeH5V7AGQBm9rakn4dkA+BVM9sEbJI0DTgCeKWcvnsDD4T2FkhakEzAjRrUY2kZ01Vc1YrFYkUO0ncGmZmZfPPNN4WfMzIymD17Ns2bN+ff//43p59+Os8++2yNTBycc845v2Ha1Vhm9inQlSiJuFPSTWHVT+H3VrYnwKIkK/a7eHm5ISRZz7mE+vfvT8+ePVm6dClt2rThiSeeSFj3lltuYe3atfz+978nKyuLbt38Hn3nnHM1i195cDWWpNbAOjN7TlIekFNG9XeB84BbJWUTTW3aEK5UnCrpTqJpS9nAiCS6L2hvmqRORFOfnNth48aNK3N9bm5u4fLjjz/O448/Xs0ROeeccxXnyYOryTKBuyVtA7YQ3YdQ6qNUgZHAU2F60Q/AhXHrZgKvA22BW5O43wHg4bj25oU2nHPOOefqNE8eXI1lZlOAKcWKM+LWzya6koCZrQNOTdDUp2ZW7tu2zCwX6BSWNwHn7GjMzjnnnHO1md/z4JxzzjnnnEuKX3lwtZqZjSxeJikTeLZY8U9m1j0lQTnnnHPO7aQ8eXB1jpktZPs7IJxzzjnnXJJ82pJzzjnnnHMuKZ48OOecc84555LiyYNzzlWDgQMH0qJFCzp16lRi3T333IMk1qxZA4CZceWVV9KuXTs6d+7M3LlzUx2uc845lxRPHpxzrhrk5OQwefLkEuXLly9n6tSptG3btrDsjTfeYNmyZSxbtowxY8Zw2WWXpTJU55xzLml1OnmQNFLS1WWsP03SoSmK5fpU9FNG/7dIOjYsD5W0ezrjiScpS9KJ5dTJkfRgFff7pKRvJC2qynZd3dC7d2+aNWtWonzYsGHcddddhLefA/Dqq68yYMAAJNGjRw/Wr1/PqlWrUhmuc845lxR/2lLZTgNeA5akoK/rgTtS0E+pzOymuI9DgeeI3tRcE2QB3YB/pLjfscCDwDPJbrBpy1YyRrxebQG5ooZn5pNTw8Y7d1TfhOsmTZrEPvvsQ5cuXYqUr1y5kn333bfwc5s2bVi5ciWtWrWqtjidc865iqhzVx4k3SBpqaR/Au1D2cWSZkmaL+llSbtLOhI4Bfh/9u48vKrq3v/4+8OgAnEoAlZFi4qGqyGlhVa0lcYBWou2UAdE/GkE5VLHWqXqVShQuUjV9noRRayCVYoUJ0BtkCIH0AoyGAJ4RRxSAeFeUVECFgG/vz/2SjhJzjk5mU4gfF/Pkyf7rL33mk7QtfZaa697JBVKOiH8FEhaJmmhpE4p0jlC0nMhzhUhPiQ9H+5fLWlwCLsbaBHSmZIizkT3/lLS7+OuyZc0LhwPk/S2pDmSplYxyjJZ0oWSbgCOAuZJmhfO9ZL0uqTlkqZLygrhxZL+M5xbKum7kmZLek/SkCq+h99IWhnq5u4QFpM0VtIbkt6RdIakA4BRQL9QP/1SxRviOV/SYklvSvq7pCNCeNtQF8slPSzpn5LaJIvHzBYAn1aVnnPp2L59O6NHj2bUqFGVzplZpbD4kQnnnHNub7FfjTxI6gpcAnyHqOzLgWXAs2b2SLjmLmCQmY2TNBN4wcyeDufmAkPMbK2kU4EHgbOSJPffwHwz6yupKZAVwgea2aeSWgBLJD1jZrdJus7Mqtp7oNK9wNPA68BvwjX9gNGSugEXJChrSmb235J+DZxpZptD4/pO4Bwz2ybpVuDXRA16gHVmdpqkPxI9qf8BcBCwGpiQKA1J5xKN6pxqZtslxc/taGZm3w/TlH5rZudIGg50M7Prqsp/8CrQ3cxM0lWhbm4Gfgu8YmZjJP0EGJxmfCmFjtxggDZt2jK88666iNal4YgW0ejD3iQWi5Udb9q0iW3bthGLxXj//fd55513yM7OBuDjjz/mlFNO4aGHHqJJkybMnj2bXbuisqxdu5bi4mK2bt3aEEVIqaSkpFwZXf3zOs8sr+/M8zrPrNrW937VeQDOAJ4zs+0AoXMAkBM6DYcRNfJnV7wxPG0/HZge90TwwBRpnQVcDmBmu4HPQ/gNkvqG42OAE4FP0sx/pXvNbJGk9yV1B9YSjaa8BtwIzDCzL0P+Z6WZRkXdgZOB10K5DyDqrJQqrcOVQJaZbQW2SvqXpMPMbEuCOM8BJpV+D2YW/3T/2fB7GdChhnluD0yTdGTI7wch/IdA35BmgaTPahh/OWY2EZgIcOzxHe2+lfvbP6uGc3PnXext9V08IG/PcXExrVq1Ii8vj7y8PAYOHFh2rkOHDixdupQ2bdpw4IEH8sADDzBq1CgWL17MN7/5TS644IIGyH3VYrEYeXl5DZ2N/YrXeWZ5fWee13lm1ba+967/62ZG5fkB0RPzPma2QlI+kJfgmibAljRGB5KSlEfUcD4tPHGPET2lr+2904CLgbeJOkemupvzIGCOmfVPcn5H+P113HHp52R/XyLx9xAf3+4U91dlHPAHM5sZ6m1EXLr1qkXzpqxJMefd1a1YLFausb436d+/P7FYjM2bN9O+fXtGjhzJoEGDEl7705/+lJdeeomOHTvSsmVLJk2alOHcOuecc+nZ39Y8LAD6Smoh6WDg/BB+MLBRUnNgQNz1W8M5zOwL4ANJFwEoUn7VY3lzgV+Ga5tKOgQ4FPgsNP47ET3VL7UzpJ9MqnufJZoG1J+oIwHR1J3zJR0URk2q06ItKzewCPiBpI6hLC0lnVSNuBJ5GRio8EanCtOWqspPOg4FNoTjK+LCXyXqZCGpF/CNasTpXLVMnTqVjRs3snPnTtavX1+p41BcXEybNtGSG0mMHz+e9957j5UrV9KtW7eGyLJzzjlXpf2q82Bmy4ka14XAM8DCcGoYsBiYQ/T0vtRTwNCw8PYEoo7FIEkriOb0/zxFcjcCZ0paSTQF5xSgAGgmqQj4HVHDvNREoEjJF0wnvdfMPiN6I9S3zOyNELaEaErRCqLOxVL2TJ2qykTgb5LmmdnHQD4wNaS9CEi6UDwdZlYQ8rZUUiGQdCF3MA84Od0F00QjDdMlLQQ2x4WPBHpJWg6cC2wk6pgkJGkq0RStbEnrJSV+bOycc845t59Qord8uMZBUpaZlYQn/AuAwaEDtV+SdCCw28x2SToNeKg209ASyc7OtjVr1tRllC4FnyebeV7nmed1nlle35nndZ5Z8fUtaZmZVWu4e39c87A/mahok7uDgMf3545DcCzwV0lNgK+Aqxs4P84555xz+xTvPNSSpDuAiyoETzez0TWM73Ci9RIVnW1m6b6VCQAzuzRB/OOJXqca734zq/MVmpI6A09UCN5hZqfWIs4riaaExXvNzK6t6l4zW0v06tr4+Oqsvp1zzjnnGjvvPNRS6CTUqKOQJL5PiHZUrhfpNLLrMK2V1HFZQienzjo69V3fzjnnnHONyX61YNo555xzzjlXc955cM4555xzzqXFOw/OOeecc865tHjnwTnn6sHAgQNp164dOTk5lc7de++9SGLz5mgbEjPjhhtuoGPHjuTm5rJ8+f7+YjTnnHN7K+88OOdcPcjPz6egoKBS+Lp165gzZw7HHntsWdjf/vY31q5dy9q1a5k4cSK//OUvM5lV55xzLm3eeXCVSPpH+N1BUqXXvdZxWm0lLQ67eJ8h6SVJh1Xj/nxJR9VhfvIlPVBX8bn9V48ePWjdunWl8Jtuuonf//73SCoLmzFjBpdffjmS6N69O1u2bGHjxo2ZzK5zzjmXFn9Vq6vEzE4Phx2AS4G/1GNyZwNvm9kV4fPCihcoamXJzL5OcH8+sAr4qN5yWA1f7txNh9tebOhs7Ddu7ryL/L2svovv7p303MyZMzn66KP59re/XS58w4YNHHPMMWWf27dvz4YNGzjyyCPrLZ/OOedcTfjIg6tEUkk4vBs4Q1KhpJskNZV0j6Qlkook/Xu4Pk/SfEl/lfSOpLslDZD0hqSVkk5Ikk4X4PfAT0MaLSQVS2oTRj3+R9KDwHLgGEmTJa0Kcd4k6UKgGzCl9P4k6dwt6a2Q53tD2PlxIx5/l3REgvvaSnomlHeJpIqb6zmXtu3btzN69GhGjRpV6ZyZVQqLH5lwzjnn9hY+8uBSuQ24xczOA5A0GPjczL4n6UDgNUkvh2u/Dfwb8CnwPvAnM/u+pBuB64FfVYzczAolDQe6mdl1IY34S7KBK83sGkldgaPNLCdcd5iZbZF0Xcjj0kQFkNQa6At0MjOLmxL1KtA9hF0F/Aa4ucLt9wN/NLNXJR0LzA5lrJjGYGAwQJs2bRneeVfCynR174gW0ejD3iQWi5Udb9q0iW3bthGLxXj//fd55513yM7OBuDjjz/mlFNO4aGHHqJJkybMnj2bXbuisqxdu5bi4mK2bt3aEEVIqaSkpFwZXf3zOs8sr+/M8zrPrNrWt3ceXHX0AnLDE3+AQ4ETga+AJWa2EUDSe0Bpp2IlcGYN0/unmS0Kx+8Dx0saB7wYF39VvgD+BfxJ0ovACyG8PTBN0pHAAcAHCe49Bzg5rkNziKSDzaxci87MJgITAbKzs+36AT9PM2uutmKxGBfn5TV0NpIqLi6mVatW5OXlkZeXx8CBA8vOdejQgaVLl9KmTRsOPPBAHnjgAUaNGsXixYv55je/yQUXXNCAOU8uFouRtxfXeWPkdZ5ZXt+Z53WeWbWtb5+25KpDwPVm1iX8HGdmpY34HXHXfR06ToXnAAAgAElEQVT3+Wtq3kndVnpgZp8RjW7EgGuBP6UTgZntAr4PPAP0AUpffzMOeMDMOgP/DhyU4PYmwGlx5T26YsfBuWT69+/Paaedxpo1a2jfvj2PPvpo0mt/+tOfcvzxx9OxY0euvvpqHnzwwQzm1DnnnEufjzy4VLYCB8d9ng38UtIrZrZT0knAhkxkRFIb4CszeyaMbExOkseK92UBLc3sJUmLgHfDqUPZk/crEt4cjW5cB9wT4upiZoW1Kojbb0ydOjXl+eLi4rJjSYwfP76ec+Scc87VnnceXCpFwC5JK4ga6/cTvYFpeXgD0sdET/Mz4WhgkqTS0bLbw+/JwARJXxKNEnxZ4b6DgRmSDiIaObkphI8ApkvaACwCjkuQ5g3AeElFRP9WFgBD6qY4zjnnnHP7Hu88uErMLCv83kn0KtV4/xF+4sXCT+n9eXHH5c4lSGsye0YRMLMO4XAzkBMXvgL4boL7nyGakpQs/o1E05Yqhs8AZqTKj5ltBvoli9s555xzbn/jax6cc84555xzafGRB5cRku4ALqoQPN3MRtdhGs9RefrRrWY2u67ScM4555zbn3nnwWVE6CTUWUchSRp96zN+55xzzrn9nU9bcs4555xzzqXFOw/OOeecc865tHjnwTnnnHPOOZcW7zw451wtDBw4kHbt2pGTU/ZmYYYNG0Zubi5dunShV69efPTRRwDMmDGjLLxbt268+uqrDZVt55xzrka887CfkzRC0i0pzveRdHIN454s6cIE4XmSXqhhnCU1uc+5+pKfn09BQUG5sKFDh1JUVERhYSHnnXceo0aNAuDss89mxYoVFBYW8thjj3HVVVc1RJadc865GvO3Lbmq9AFeAN5q6IzsC77cuZsOt73Y0NnYb9zceRf5DVTfxXf3BqBHjx4UFxeXO3fIIYeUHW/bto1oQ3bIyspKGO6cc87tK3zkYT8k6Q5JayT9HcgOYVdLWiJphaRnJLWUdDrwM+AeSYWSTgg/BZKWSVooqVMVyZ0TrntH0nkJ8tJa0vOSiiQtkpQbwrMkTZK0Mpy7oMJ9bSS9Lql3kjLmSYpJelrS25KmKLTUJBVLahOOu0mKheMRkh6X9HK45heSfh/yUCCpebUq2u3X7rjjDo455himTJlSNvIA8Nxzz9GpUyd69+7NY4891oA5dM4556pPZtbQeXAZJKkrMBk4lWjkaTkwAZhkZp+Ea+4C/tfMxkmaDLxgZk+Hc3OBIWa2VtKpwBgzOytJWpOBbwI/BU4A5gEdge7ALWZ2nqRxwGYzGynpLOAPZtZF0ljgQDP7VYjrG2b2WZi2dAIwE7jTzOYkSTsPmAGcAnwEvAYMNbNXJRUD3cxss6RuwL1mlidpBHAOcCZwMvA6cIGZ/S1sQPe4mT2fIK3BwGCANm3adh3+X4+k/A5c3TmiBfzvlw2TduejDy073rRpE7fffjuTJk2qdN2UKVP46quvuPLKK8uFr1ixgj//+c/cd9999Z7XulRSUlJuBMXVP6/zzPL6zjyv88yKr+8zzzxzmZl1q879Pm1p/3MG8JyZbQeQNDOE54ROw2FAFlBpV2ZJWcDpwPS46RYHVpHeX83sa2CtpPeBiiMVPwQuADCzVyQdLulQokb8JaUXmdln4bA5MBe41szmV5H2G2a2PuS9EOgAVLVC9W9mtlPSSqApUDqZfWW4vxIzmwhMBDj2+I5230r/Z5UpN3feRUPVd/GAvD3HxcW0atWKvLy8Stcdd9xx9O7dm8cff7xceF5eHv/1X/9FTk4Obdq0qefc1p1YLJawnK7+eJ1nltd35nmdZ1Zt69tbOfunRMNNk4E+ZrZCUj6Ql+CaJsAWM+tSi7Qqfk406dtCeKJ87gKWAT8Gquo87Ig73s2ev/dd7Jmyd1Cie8zsa0k7bc/Q3Nek8e+lRfOmrLk74UwqVw9isVi5RvzeYu3atZx44okAzJw5k06doj7zu+++ywknnIAkli9fzldffcXhhx/ekFl1zjnnqsXXPOx/FgB9JbWQdDBwfgg/GNgY5vUPiLt+aziHmX0BfCDpIgBFvl1FehdJaiLpBOB4YE2C/AwI8eURTWH6AngZuK70IknfCIcGDAQ6Sbot/WKXUwx0DccXpLjOuSr179+f0047jTVr1tC+fXseffRRbrvtNnJycsjNzeXll1/m/vvvB+CZZ54hJyeHLl26cO211zJt2jRfNO2cc26f4iMP+xkzWy5pGlAI/BNYGE4NAxaHsJWEDgPwFPCIpBuAC4ka+g9JupNoCtFTwIoUSa4hGiE4gmitxL8qNJZGAJMkFQHbgStC+F3AeEmriEYNRgLPhjLslnQJMEvSF2b2YDWrYSTwqKT/CGV2rsamTp1aKWzQoEEJr7311lu59dZb6ztLzjnnXL3xzsN+yMxGA6MTnHoowbWvES0ejveTNNPJTxIeA2Lh+FPg5wmuKWFPRyI+PCv8/opo6lKytMvSCJ+vizteCJyU4J4RidJKdM4555xzbn/k05acc84555xzafGRB1drku4ALqoQPD2McNR32p2BJyoE7zCzU+s7beecc865/Y13HlytpZgGlYm0VwLVefuTc84555yrIZ+25JxzzjnnnEuLdx6cc84555xzafHOg3POOeeccy4t3nlwzrkaGjhwIO3atSMnJ6csbNiwYeTm5tKlSxd69erFRx99BMCUKVPIzc0lNzeX008/nRUrUm2P4pxzzu2dvPPgnHM1lJ+fT0FBQbmwoUOHUlRURGFhIeeddx6jRo0C4LjjjmP+/PkUFRUxbNgwBg8e3BBZds4552qlwTsPkkZIuiXF+T6SKm5SVpv08iU9UFfx7eskldRDnB3CztB1FV+epNOruCbl31EN0y2QtEXSC3UZr2s8evToQevWrcuFHXLIIWXH27Zto3RH9dNPP51vfOMbAHTv3p3169dnLqPOOedcHdkXXtXaB3gBeKuhM+IaTB5QAvwjw+neA7QE/j3dG77cuZsOt71Yfzly5dzceRf5DVDfxXf3Tnn+jjvu4M9//jOHHnoo8+bNq3T+0Ucf5dxzz62v7DnnnHP1pkFGHiTdIWmNpL8D2SHsaklLJK2Q9IykluFp88+AeyQVSjoh/BRIWiZpoaROKdK5SNKqEOeCuFNHhTjWSvp93PX9Ja0M94yNCy+RdJ+k5ZLmSmqbIs1E5ThUUrGkJuGalpLWSWou6XuSiiS9LumeVE/sJb0kKTccvylpeDj+naSrwvHQkH6RpJFx914m6Y1Qjw9Laloh7jYhD72TxRNGFP5H0iOSVkt6WVKLcK5rKPPrwLXJyhCubSrp3lDXRZKuD+HFkkaGel4pqZOkDsAQ4KaQ9zNSxZ3sOwjhJ0haFM6NqmrUxczmAlurSs+5ikaPHs26desYMGAADzxQfqBz3rx5PProo4wdOzbJ3c4559zeK+MjD5K6ApcA3wnpLweWAc+a2SPhmruAQWY2TtJM4AUzezqcmwsMMbO1kk4FHgTOSpLccODHZrZB0mFx4V1C+juANZLGAbuBsUBX4DPgZUl9zOx5oBWw3MxuDg323wLXJUkzWTlWAD8C5gHnA7PNbKekScBgM/uHpLurqL4FwBmSioFdwA9C+A+BJyX1Ak4Evg8ImCmpB/Ax0A/4QUjzQWAA8OeQzyOAmcCdZjYnRTwfhvD+Zna1pL8CFwBPApOA681svqR7qijHYOA44DtmtktS/LyPzWb2XUnXALeY2VWSJgAlZnZvFfGWqvQdAOOA+4H7zWyqpCFpxlUlSYNDmWjTpi3DO++qq6hdFY5oEY0+ZFosFis73rRpE9u2bSsXVuq4447j9ttv58wzzwTgvffeY/jw4dx9992sXLkyQ7mtWyUlJQnL6uqP13lmeX1nntd5ZtW2vhti2tIZwHNmth0gdA4AckJD7zAgC5hd8UZJWcDpwHSFecTAgSnSeg2YHBq5z8aFzzWzz0OcbwHfAg4HYmb2cQifAvQAnge+BqaFe5+sEFdFycoxjagBP4+o8/Rg6NAcbGal03H+ApyXIu6FwA3AB8CLQM/wVL2Dma2RdDXQC3gzXJ9F1NjPJeoULQn11gL4v3BNc2AucK2ZzQ9hvZLE8yHwgZkVhvBlQAdJhwKHxd3/BJBqTsY5wAQz2wVgZp/GnSut22XAL1LEkUqy7+A0omlwENV1up2RlMxsIjARIDs7264f8PO6iNalIRaLcXFeXoPmobi4mFatWpEX8rF27VpOPPFEAMaNG0fXrl3Jy8vjww8/5KqrrmL69OmcfnrKJTx7tVgsVlZWlxle55nl9Z15XueZVdv6bqg1D5YgbDLQx8xWSMonmudeURNgi5l1SSsRsyFhdKI3UCip9L4dcZftJqoHVbw/VdQpzk0mcTlmAmPCU/auwCvAIYkiSGEJ0A14H5gDtAGuJmpoQ1SGMWb2cPxNYVrQ42Z2e4I4d4X7fwyUNv6TxdOBynXXIlyfqk4qSnV9afyl30tNTKbqvyXnaq1///7EYjE2b95M+/btGTlyJC+99BJr1qyhSZMmfOtb32LChAkAjBo1ik8++YRrrrkGgGbNmrF06dKGzL5zzjlXbQ2x5mEB0FdSC0kHE03hATgY2CipOdGUmlJbwznM7AvgA0kXASjy7WQJSTrBzBab2XBgM3BMinwtBn4U5v43BfqzpzHdBLgwHF8KvJoinoTlMLMS4A2iqTMvmNluM/sM2Cqpe7jskhTxYmZfAeuAi4FFRCMRt4TfED1hHxhGaJB0tKR2RCMLF4ZjJLWW9K3SaIGBQCdJt1URT7J8bQE+l/TDEDQg2bXBy8AQSc1K81PF9WV/A2lK9re0iGiaFVRR186lY+rUqWzcuJGdO3eyfv16Bg0axDPPPMOqVasoKipi1qxZHH300QD86U9/4rPPPqOwsJDCwkLvODjnnNsnZbzzYGbLiabwFALPsKfhO4yoAT8HeDvulqeAoYoWCJ9A1BgcFNYQrAZSzRG5Jyy8XUXUaUm6K5OZbQRuJ5pWtIJojcOMcHobcIqkZUTrK0alSDNZOQjlvow9U6Agmo8/MSw0FvB5irghqq//DdO+FgLtw2/M7GWi6TivS1oJPE00Leot4E6idRxFIW9HxpV9N1Fj+kxJ1ySLp4p8XQmMD+X4sopr/0Q0BaoofI+XVnH9LKIOZ1oLpkn+HfwK+LWkN4jKn7KuJS0EpgNnS1ov6cdppO2cc84512jJrDqzTfZPkkrMLKue4s4KoxKEJ/9HmtmN9ZHW/i6sD/nSzEzSJUQLv+t0gUJ2dratWbOmLqN0Kfg82czzOs88r/PM8vrOPK/zzIqvb0nLzKxbde7fF/Z5aOx6S7qd6Lv4J5DfsNlp1LoCDyhaNb6FaLqWc84555xLU6PoPEi6A7ioQvB0MxtdF/EnGnWQNJ49r0otdb+ZTapm3NMoP42JMD2m4kvgPzCzvtWJu6HVRzlq812b2UKg3BoZSZ2J3g4Vb4eZnVrTPDrnnHPONVaNovMQGo510lGoRpopN0KrZdyzSfCq2n1NfZSjrr9rM1tJtO+Hc84555yrQoPsMO2cc84555zb93jnwTnnnHPOOZcW7zw455xzzjnn0uKdB+ecS9PAgQNp164dOTk5ZWFDhw6lU6dO5Obm0rdvX7Zs2QLAzp07ueKKK+jcuTP/9m//xpgxYxoq284551yd8c6Dc86lKT8/n4KCgnJhPXv2LNtR+qSTTirrJEyfPp0dO3awcuVKli1bxsMPP0xxcXED5No555yrO42+8yBphKRbUpzvI+nkGsY9RNLl4Thf0lE1zWdDkzRK0jnh+FdhQ7W9gqQukn5axTX5kh6owzQPkvSGpBWSVksaWVdxu31Xjx49aN26dbmwXr160axZ9OK67t27s379egAksW3bNnbt2sWXX37JAQccwCGHHJLxPDvnnHN1qVG8qrWW+gAvAG9V90YzmxD3MR9YBXxUN9nKLDMbHvfxV8CTwPYGyk5FXYBuwEsZTHMHcJaZlUhqDrwq6W9mtijVTV/u3E2H217MTA4dN3feRX4G6rv47t5pXffYY4/Rr18/AC688EJmzJjBkUceyfbt2/njH/9YqePhnHPO7WsaZechbCR2ObAO+BhYJulqYDBwAPAu8P+IGqU/A34k6U7gghDFeKAtUeP5ajN7O0k6I4ASoJiocTtF0pfAacDJwB+ALGAzkG9mGyXFgDeJdjtuG/J5O9AZmGZmd6Yo1/PAMcBBRBvSTZT0S+A4M/tNuCYf6Gpm10saBgwI9bAZWGZm9yaJezJRJ+qo8DNP0mYzO1NSL2AkcCDwHnBlaFQXA38BzgSah/odA3QE7qnQuaqY3m+IvoOvgb+Z2W2hbhaH+A4DBoXPo4AWkn4IjAkb6yUl6XzgTqLv+hNggJn9r6S2Ib+HA0uAn4S62lwxDjMzou+WULbmgCVJb3AoO23atGV4512psufq0BEtog5EfYvFYmXHmzZtYtu2beXCAJ588km2bNnC0UcfTSwWY+XKlWzevJmpU6eydetWbrzxRrKysjjqqH12gBKAkpKSSmV39cvrPLO8vjPP6zyzalvfja7zIKkrcAnwHaLyLQeWAc+a2SPhmruAQWY2TtJM4AUzezqcmwsMMbO1kk4FHgTOSpWmmT0t6TrgFjNbGp5UjwN+bmYfS+pHtLHZwHDLV2bWQ9KNwAyijsSnwHuS/mhmnyRJaqCZfSqpBbBE0jPA08DrwG/CNf2A0ZK6EXWGKtZDSmb235J+DZxpZpsltSFqiJ9jZtsk3Qr8mqhBD7DOzE6T9EdgMtGu2wcBq4GEnQdJ5xKN+JxqZtslxT+ObWZm3w/TlH5rZudIGg50M7Prqsp/8CrQ3cxM0lWhbm4Gfgu8YmZjJP2E0OBPRlJTojrrCIw3s8WJrjOzicBEgGOP72j3rWx0/6z2Wjd33kUm6rt4QN6e4+JiWrVqRV7enrDHH3+c1atXM3fuXFq2jGb8TZ8+nSuuuIJzzjkHgFmzZtGsWbNy9+2LYrHYPl+GfY3XeWZ5fWee13lm1ba+G2Mr5wzgOTPbDhA6BwA5odNwGNFoQKWdjyVlAacD0yWVBh9YgzxkAznAnBBPU2Bj3PnSPK0EVpvZxpD++0QjC8k6DzdI6huOjwFONLNFkt6X1B1YG9J+DbgRmGFmX4a4Z9WgHADdiUZRXgtlOYCos5KoLFlmthXYKulfkg4zsy0J4jwHmFT6HZnZp3Hnng2/lwEdapjn9sA0SUeG/H4Qwn8I9A1pFkj6LFUkZrYb6CLpMOA5STlmtirVPS2aN2VNmlNcXO3FYrFyDfuGUFBQwNixY5k/f35ZxwHg2GOP5ZVXXuGyyy5j+/btLFq0iF/96lcNmFPnnHOu9hpj5wESTy+ZDPQxsxVhak9egmuaAFvMrEst0xdRp+C0JOd3hN9fxx2Xfk74nUjKI2p0nxae1seInvADTAMuBt4m6jiZ4no/tSRgjpn1T3K+2mUJcSacAhQXx+4U91dlHPAHM5sZ6m1EXLrVZmZbQn3/hGhdi9tP9e/fn1gsxubNm2nfvj0jR45kzJgx7Nixg549ewLRoukJEyZw7bXXcuWVV5KTk4OZceWVV5Kbm9vAJXDOOedqpzF2HhYAkyXdTVS+84GHgYOBjWFK0QBgQ7h+aziHmX0h6QNJF5nZ9NAAzzWzFWmkWxYPsAZoK+k0M3s9pHmSma2uRbkOBT4LHYdORCMCpZ4F7gD+Cdwawl4FHpY0hqgeegOPpJlWaVk2A4uA8ZI6mtm74S1M7c3snVqU5WVguKS/lE5bqjD6kCw/6TqUPd/vFXHhrxJ1ssaGdRzfSBZBWB+xM3QcWhB13MZWIw+uEZo6dWqlsEGDBiW8Nisri+nTp9d3lpxzzrmManSvajWz5URP4guBZ4CF4dQwosW3c4ie0Jd6Chgq6U1JJxB1LAZJWkE0b//naSY9GZggqZBomtKFRI3UFSEvp9emXEAB0ExSEfA7okY9AGb2GdHbor5lZm+EsCVEU4pWEHUulgKfp5nWROBvkuaZ2cdEb5KaGtJeBHSqTUHMrCDkbWmor6Sv0g3mASdLKgzrR6oygmjq2UKiDlCpkUAvScuBc4mmkm1NEseRRIvGi4gWV88xsxfSSNs555xzrtFS9FIZ1xhJygpvRWpJNCIzOHSu9kuSDgR2m9kuSacBD9XBFLVysrOzbc2aNXUZpUvBF9llntd55nmdZ5bXd+Z5nWdWfH1LWmZm3apzf2OctuT2mBg2wDsIeHx/7jgExwJ/ldQE+Aq4uoHz45xzzjm3T/HOQxrCvhEXVQiebmaj6yGtw4G5CU6dneIVrgmZ2aUJ4h9P9DrVePeb2aTqxJ0OSZ2BJyoE7zCzU2sR55VEb5KK95qZXVvVvWa2lujVtfHx1Vl9O+ecc841dt55SEPoJNR5RyFJWp8QbV5XX/FX2ciuw7RWUsdlCZ2cOuvo1Hd9O+ecc841Jo1uwbRzzjnnnHOufnjnwTnnnHPOOZcW7zw451waBg4cSLt27cjJySkLGzp0KJ06dSI3N5e+ffuyZUu0ofqUKVPo0qVL2U+TJk0oLCxsqKw755xzdcY7D845l4b8/HwKCgrKhfXs2ZNVq1ZRVFTESSedxJgxYwAYMGAAhYWFFBYW8sQTT9ChQwe6dPGlNc455/Z91e48SPqGpNy6zISkEZKSbhQmqU945WhN4h4i6fJwnC/pqJrms6b2hjxUZW/Oo6QOkiq9OarCNXmS6nQTN0mjJa2TVFKX8bp9U48ePWjdunW5sF69etGsWfTeie7du7N+/fpK902dOpX+/ftnJI/OOedcfUvrbUuSYsDPwvWFwMeS5pvZr+sxb/H6AC8Q7aJcLWY2Ie5jPrAK+KhusrXv5KEqe3keOwCXAn/JcLqzgAeAtene8OXO3XS47cX6y5Er5+bOu8iv5/ouvrt3Wtc99thj9OtXeQP0adOmMWPGjLrOlnPOOdcg0h15ONTMvgB+AUwys67AObVJWNIdktZI+juQHcKulrRE0gpJz0hqKel0oo7LPZIKJZ0QfgokLZO0UFKnFOmMkHSLpAuBbsCUEE8LSV0lzQ/xzJZ0ZLgnJumPkhZI+h9J35P0rKS1ku6qolyXSyoKZXiiijz0lvRc3L09JT2bIu6HJC2VtFrSyBB2rqS/xl2TJ2lWOB4k6Z1QnkckPbCX19NkSf8t6R+S3g95AbgbOCPk56ZU8YZ4vh/ieDP8Lv37ainpryHdaZIWS0q6q6KZLTKzjVWl59zo0aNp1qwZAwYMKBe+ePFiWrZsWW6dhHPOObcvS3efh2ahwXgxcEdtE5XUFbiEaMOuZsByYBnwrJk9Eq65CxhkZuMkzQReMLOnw7m5wBAzWyvpVOBB4KxUaZrZ05KuA24xs6WSmgPjgJ+b2ceS+hHt5TAw3PKVmfWQdCMwA+gKfAq8J+mPiTYQk3QKUf38wMw2Syo3xyFBHgTcJ6mtmX0MXEnqPQzuMLNPJTUF5iqaPjYHeFhSKzPbBvQDpimadjQM+C6wFXgFWJGqjvaSejoS+CHQCZgJPA3cFvJzXlX5D94GepjZLknnAP8JXABcA3xmZrmScohG0WpN0mBgMECbNm0Z3nlXXUTr0nBEi2j0oT7FYrGy402bNrFt27ZyYQUFBcyaNYv77ruP+fPnl7t3/PjxnHrqqeWu39eVlJQ0qvLsC7zOM8vrO/O8zjOrtvWdbudhFDCbaCffJZKOpxpTORI4A3jOzLYDhM4BQE7oNBwGZIU0y5GUBZwOTI/a3gAcWIM8ZAM5wJwQT1Mg/ilzaZ5WAqtLn0BLeh84Bki0+/BZwNNmthnAzD5NlQEzs/DU/TJJk4DTgMtT3HJxaKg2I2pkn2xmRZIKgPMlPQ30Bn4DnA3ML82DpOnASanyk0Sm6+l5M/saeEvSETXIL8ChwOOSTgQMaB7CfwjcH9JcJamohvGXY2YTgYkA2dnZdv2An9dFtC4NsViMi/PyMpZecXExrVq1Ii+kWVBQwMyZM5k/fz5t27Ytd+3XX3/NZZddxoIFCzj++OMzlsf6FovFysrvMsPrPLO8vjPP6zyzalvfaXUezGw6MD3u8/tET3JrwxKETQb6mNkKSflAXoJrmgBbzKy2ry4RUWP3tCTnd4TfX8cdl35OVm8icblSmUQ0t/5fwHQzS/gYVdJxwC3A98zsM0mTgYPC6WnAtURP/JeY2VbF9axqKdP1tKPCdTXxO2CemfWV1AGI1TI+5+jfvz+xWIzNmzfTvn17Ro4cyZgxY9ixYwc9e/YEokXTEyZEy4cWLFhA+/btG1XHwTnnnEtrzYOkkyTNlbQqfM6VdGct0l0A9A3z6Q8Gzg/hBwMbw1SZ+MnDW8M5wtqLDyRdFPIiSd9OM92yeIA1QFtJp4V4mofpNLUxl2h04PAQZ+sE18TnATP7iGhh8p1EnadkDgG2AZ+HJ/Lnxp2LEU1PupqoIwHwBvAjRW/Hakb1Ont7Qz0ly086DgU2hOP8uPBXiabeoejtXZ2rEafbz02dOpWNGzeyc+dO1q9fz6BBg3j33XdZt25d2WtZSzsOAHl5eSxatKgBc+ycc87VvXQXTD8C3A7sBDCzIqI1CzViZsuJGrmFwDPAwnBqGLCYaB7/23G3PAUMDQtgTyDqWAyStAJYDaQ7T2QyMEFSIdH0mwuBsSGeQqLpUDVmZquJ1gPMD3H+IVUeJLUIYVOAdWaW9G1SZrYCeJOovI8Br8Wd2030Nqpzw2/MbAPRXP/FwN+J3lT1eZpFKcsjDVdP8YqAXWFxdZULpoHfA2MkvUaU/1IPEnWEioBbQ7xJ60TS7yWtB1pKWi9pRBppO+ecc841WjKrepaNpCVm9j1Jb5rZd0JYYR1MHXKAorcgvWlmj9ZxvFlmVhJGHp4DHjOz56q6r7EKC82bm9m/Qid0LnCSmX1VV2lkZ2fbmjVr6io6VwWfJ5t5XueZ53WeWR0zzIYAACAASURBVF7fmed1nlnx9S1pmZklffNkIukumN4cGlsWErqQ8otmXQ1JWkY0Henmeoh+RHjb0EHAy8Dz9ZDGvqQlMC9MixPwy7rsODjnnHPONXbpdh6uJXqbTCdJG4APKL8mocFJugO4qELwdDMbXQ9pHU701LqisxO9mjSVsGdGxfgXU/kNUv/PzFZWM+5Ku3bvq/UUF+ePgbEVgj8ws75V3WtmW4n2sKgYZ53Ut3POOedcY1dl50FSE6CbmZ0jqRXQJDTC9iqh8VvnDeAkaX0C1NuULTM7tR7j3qfrycxmk+AVvrWMs97q2znnnHOuMalywXR45/514Xjb3thxcM4555xzztW/dN+2NEfSLZKOkdS69Kdec+acc84555zbq6S75mFg+H1tXJgBvvuRc84555xz+4m0Rh7M7LgEP95xcM41egMHDqRdu3bk5OSUhQ0dOpROnTqRm5tL37592bJlS7l7PvzwQ7Kysrj33nsznV3nnHOuXqW7w/TliX7qO3POOdfQ8vPzKSgoKBfWs2dPVq1aRVFRESeddBJjxowpd/6mm27i3HPPxTnnnGts0l3z8L24nzOAEcDP6ioTkkZIqvRa0bjzfSSdXIfp5YeN2RwgqSSNayaH/T0ahKT/SOOaKstRzTTvkfS2pCJJz0k6rC7jd/uGHj160Lp1+SVevXr1olmzaNZn9+7dWb9+fdm5559/nuOPP55TTjklo/l0zjnnMiGtNQ9mdn38Z0mHAk/US44S6wO8ALyVwTTd3uU/gP/McJpzgNvNbJekscDtwK2pbvhy52463PZiRjLn4ObOu8ivp/ouvrt3Wtc99thj9OvXD4Bt27YxduxY5syZ41OWnHPONUrpLpiuaDtwYm0SDpuVXQ6sAz4Glkm6GhgMHAC8C/w/on0Cfgb8SNKdwAUhivFA25CXq83s7STpXAT8FtgNfG5mPcKpoyQVACcAz5nZb8L1/YkaqgJeNLNbQ3gJ8DBwJvAZcImZfZwkzUTlaA6sAI43s68ltQTWEC067wI8SrTT9KvAuWaWkyTul4DbzKxI0psh76Mk/Q74p5n9SdJQ4GKijc+eM7PfhnsvA24I+VoMXGNmu+PibgPMAu4CXgLGAWcRbQqouOuGA+cDLYB/AP8eyjHdzL4brjkReCrRJnjh/PeA+4FWwA7gbKLv9mdEO0GXfS+S7gZaSCoEVptZyg0KJWUBM4BvhHq/08xmhHPDiDY4XAdsBpaZWcJWnpm9HPdxEZBw5EXSYKLvmzZt2jK8865U2XN16IgWUQeiPsRisbLjTZs2sW3btnJhAE8++SRbtmzh6KOPJhaL8dBDD9GrVy+WLl1KcXExLVq0qHTPvq6kpKTRlWlv53WeWV7fmed1nlm1re+0Og+SZhG9XQmiqU4nA9NrmqikrsAlwHdCHpYDy4BnzeyRcM1dwCAzGydpJvCCmT0dzs0FhpjZWkmnAg8SNXITGQ782Mw2VJh20iWkvwNYI2kcUQdjLNCVqIPwsqQ+ZvY8USN3uZndHBrPvyXsf5FAsnKsAH4EzCNqfM82s52SJgGDzewfoaGcygLgDEnFwC7gByH8h8CTknoRdey+T9TgnympB1EHrR/wg5Dmg0SN6D+HfB4BzCRqaM+R9AsgG+gMHEE06vNYSOsBMxsV7nsCOM/MZkn6XFIXMysErgQmJyqApAOAaUA/M1si6RDgy3C60vdiZrdJus7M0t1w7l9AXzP7InSIFoW/oa5EHZSKf3fpGBjyXImZTSTagZ1jj+9o962saZ/cVdfNnXdRX/VdPCBvz3FxMa1atSIvb0/Y448/zurVq5k7dy4tW7YEYNiwYSxevJjHH3+cLVu20KRJE0455RSuuy7Zfyr2PbFYrFw9uPrndZ5ZXt+Z53WeWbWt73T/rxv/ZHYX0RPu9ckuTsMZRE+VtwOEhh1ATmhsHwZkkWAn4fBU+XRgulT2MPzAFGm9BkyW9Ffg2bjwuWb2eYjzLeBbwOFArHREQdIUoAfwPPA1exqPT1aIq6Jk5ZhG1ICfR9R5ejB0aA42s3+Ea/4CnJci7oVEowcfAC8CPcMoRgczWxNGPXoBb4brs4g6E7lEjeclod5aAP8XrmkOzAWuNbP5IawHMDWMTHwk6ZW4PJwp6TdEIwStgdVEIxZ/Aq6U9OtQzu8nKUM2sNHMlgCY2RcAIV+Jvpd1KeojEQH/GTpNXwNHE3WAfgjMMLMvQ/yz0oosGiXbBUyp6toWzZuyJs3pLq72YrFYuUZ+phQUFDB27Fjmz59f1nEAWLhwYdnxiBEjyMrKalQdB+eccy7dzsNPS6fvlJI0tmJYNVmCsMlAHzNbISkfyEtwTRNgS7pPoc1sSBid6A0USiq9b0fcZbuJ6kIV708VdYpzk0lcjpnAmLDBXlfgFeCQaqQJsAToBrxPNCe/DXA1e56gCxhjZg/H3yTpeuBxM7s9QZy7wv0/BubHhVcqo6SDiEZ6upnZOkkjgIPC6WeIRmReIZoO9EmSMihR3EGi76W6BhBNaesaRlmKQx6r8/0CIOkKos7c2WaW6jt3jVT//v2JxWJs3ryZ9u3bM3LkSMaMGcOOHTvo2bMnEC2anjBhQgPn1DnnnKt/6b5tqWeCsNq8h3AB0FdSC0kHE03hATgY2CipOVEDsNTWcK70KfUHYS0Dinw7WUKSTjCzxWY2nGiO+zEp8rWYaG1FG0lNgf7saUw3Yc+c90uJ1iYkk7AcZlYCvEE01/8FM9ttZp8BWyV1D5ddkiJezOwroifxFxPNw18I3BJ+QzTKMTCM0CDpaEntiEYWLgzHKNol/Ful0RJNy+kk6bYQtgC4RFJTSUcSrfWAPR2FzSGNsnUAZvavkP5DwKQUxXibaM3J90JeDpZUVSdhZ6jPdBwK/F/oOJxJNHoB0Xd2vqSDQt5TDhFI+gnRAumflY6Suf3P1KlT2bhxIzt37mT9+vUMGjSId999l3Xr1lFYWEhhYWHCjsOIESO45ZakL5Fzzjnn9kkpG2ySfglcAxwvqSju1MFE04FqxMyWS5oGFAL/ZE/DdxhRA/6fwMqQDsBTwCOSbiBqrA4AHgoLqJuH8yuSJHdPWLwrogb0CqJ59YnytVHS7UTTigS8VLrQlmgx8ymSlgGfE03LSSZZOSCaujSd8qMqg0L5tgGxEH8qC4mehG+XtBBoH8Iws5cl/RvwepgGVAJcZmZvhfp6WVITYCfRjuH/DPftlnQJMEvSF0QdgLNC/t8hdKLMbIukR0J4MdFISLwpwC+Al0nCzL6S1A8YJ6kF0XqHc6oo80SgSNLyqhZMhzzMkrSU6G/s7ZDukjBFbkUo91JS1/UDRFPi5oS6XGRmQ6pI2znnnHOu0VKqmRiKXsn6DWAMcFvcqa1m9mk9522vIqnEzLLqKe6sMCpBePJ/pJndWB9p1TdF+3UcambDGjoviZTWdVgnsoBoofryuoo/Ozvb1qxZU1fRuSr4IrvM8zrPPK/zzPL6zjyv88yKr29Jy8ysW3XuTznyEBaufk40fYcw5eUgICs0wj6sSaZdJb3DiEczoifi+Q2bnZqR9BzRK1aTvflqbzBR0YaDBxGtAamzjoNzzjnnXGOX7qtazwf+ABxF9IaebwH/A+w1W6iGN+JcVCF4upmNrov4E406SBrPnlellrrfzFLN908U9zQqvAZU0o+JXhsb7wMz61uduDMpUd5Ch+K4CsG3mlmlN2mlQ9LhRNPPKjo7xQLt+DxemiDOOvkenXPOOecau3TfZHMX0B34u5l9JyxC7V9/2aq+0Emok45CNdK8th7jnk2CV9Xua+q6sxM6COnu95BunPX2PTrnnHPONSbpvm1pZ2i0NZHUxMzmUccNOOecc84559zeLd2Rhy3h1ZYLgSmS/o9obwDnnHPOOefcfiLdkYefA9uBXwEFwHvs2ZvBOecajYEDB9KuXTtycnLKwoYOHUqnTp3Izc2lb9++bNmypezcmDFj6NixI9nZ2cyevc/PNHTOOedSSqvzYGbbiDZXyzOzx4E/AV/VZ8acc64h5OfnU1BQUC6sZ8+erFq1iqKiIk466STGjBkDwFtvvcVTTz3F6tWrKSgo4JprrmH37t0NkW3nnHMuI9LqPEi6GngaeDgEHQ08XxcZkDQi7A2Q7Hyf8GrNOiEpX9IDdRXfvk5SST3E2UHSqjqML0/S6VVck/LvqAZpdpH0uqTVkorCpnZuP9CjRw9at25dLqxXr140axbN8uzevTvr168HYMaMGVxyySUceOCBHHfccXTs2JE33ngj43l2zjnnMiXdNQ/XAt8n2jUZM1sb9nzIhD7AC8BbGUrP7X3yiHbK/kcG09wOXB7+1o8ClkmabWZbUt305c7ddLjtxczk0HFz513k11F9F9/dO63rHnvsMfr1i/qSGzZsoHv37mXn2rdvz4YNG+okP84559zeKN01DzvMrGyakqRmQPKtqasg6Q5JayT9HcgOYVdLWiJphaRnJLUMT5t/BtwjqVDSCeGnQNIySQsldUqRzkWSVoU4F8SdOirEsVbS7+Ou7y9pZbhnbFx4iaT7JC2XNFdS2xRpJirHoZKKJTUJ17SUtE5Sc0nfC0+2X5d0T6on9pJekpQbjt+UNDwc/07SVeF4aEi/SNLIuHsvk/RGqMeHJTWtEHebkIfeyeIJIwr/I+mR8ET+ZUktwrmuocyvE3U2k5LUVNK9oa6LJF0fwosljQz1vFJSJ0kdgCHATSHvZ6SKO9l3EMJPkLQonBuVatTFzN4xs7Xh+COi/U2Sfu9u/zB69GiaNWvGgAEDADCr/J9BSZnOlnPOOZcx6Y48zJf0H0ALST2Ba4BZNUlQUlfgEuA7If3lwDLgWTN7JFxzFzDIzMZJmgm8YGZPh3NzgSHhifCpwIMk39F4OPBjM9sg6bC48C4h/R3AGknjgN1Em7J1BT4DXpbUx8yeB1oBy83s5tBg/y1wXZI0k5VjBfAjYB7RYvPZZrZT0iRgsJn9Q9LdVVTfAuAMScVEb7sq3djsh8CTknoBJxKNEgmYKakH8DHQD/hBSPNBYADw55DPI4CZwJ1mNidFPB+G8P5mdrWkvwIXAE8Ck4DrzWy+pHuqKMdgoo3jvmNmuyTFzxHZbGbflXQNcIuZXSVpAlBiZvdWEW+pSt8BMA64n2jzt6mShqQZF5K+DxxA9KKAROcHhzLRpk1bhnf2F5FlyhEtotGHuhCLxcqON23axLZt28qFFRQUMGvWLO677z7mz58PwFdffcX8+fNp3749AEVFRXz3u98td19jU1JS0qjLtzfyOs8sr+/M8zrPrNrWd7qdh9uIGmArgX8HXiJaNF0TZwDPmdl2gNA5AMgJDb3DgCwSbJCm6HWxpwPT457uHZgirdeAyaGR+2xc+Fwz+zzE+RbRjtmHAzEz+ziETwF6EK3t+Jo9O0A/WSGuipKVYxpRA34eUefpwdChOdjMSqfj/AU4L0XcC4EbgA+AF4Ge4al6BzNbo2htSi/gzXB9FlFjP5eoU7Qk1FsLoifpAM2Jdmy+1szmh7BeSeL5kGiX68IQvgzoIOlQ4LC4+58Azk1RjnOACWa2C8DMPo07V1q3y4BfpIgjlWTfwWlE0+AgqusqOyOSjiQqzxVm9nWia8xsIjARIDs7264f8PMaZttVVywW4+K8vDqPt7i4mFatWpEX4i4oKGDmzJnMnz+ftm33DEC1bduWSy+9lAceeICPPvqITz75hCFDhtC0adMkMe/7YrFYWb24zPA6zyyv78zzOs+s2tZ3ys6DpGPN7MPQaHok/NSFRFOeJgN9zGyFpHyiee4VNQG2mFlaG9SZ2ZAwOtEbKJRUet+OuMt2E9VDdeYapJqyNZnE5ZgJjAlP2bsCrwCHVCNNgCVAN+B9YA7QBriaqKENURnGmNnD8TeFaUGPm9ntCeLcFe7/MVDa+E8WTwcq112LcH11prGlur40/tLvpSYmU/XfUpUkHULUSbvTzBbVMC9uH9O/f39isRibN2+mffv2jBw5kjFjxrBjxw569uwJRIumJ0yYwCmnnMLFF1/MySefTLNmzRg/fnyj7jg455xzVa15KHuj0v9n797Do6qu/4+/PyAgGgQVtIgiQhXxUkGwWuslSEVbtYV6A+m3oijFW0WrFkURrRYUrKV4QbBCKyoIKCK0AkUjiKAQTAAtUav0B0q9c4kgl7B+f5w9MISZyYQkM5Cs1/Pkycw+56y9zp7Ac/bsvc+RNKmS6pwNdJVUX1IDtj8vogGwSlIdoik1MevCNsxsLfCxpItDTpJ0QrKKJLUys7fMbADwJdHtZpN5CzgzzP2vDXRn+8V0LeCi8Poy4I0UcRKeh5kVA28TTZ2ZamYlZvYNsE5SbMVltxRxCetOVgCXAPOJRiJuCb8h+ob9yjBCg6Rmiha2zwIuCq+RdICkw2NhgSuBoyX1KyNOsrxWA2sknRaKeiTbN5gB9FG0doZS05YS2fY3kKZkf0vziaZZQRltLaku8CLwdzObUI663R7uueeeY9WqVWzevJmVK1fSq1cvPvzwQ1asWEFBQQEFBQWMGDFi2/79+/fnP//5D0VFRfz0p6kG3Jxzzrk9X1mdh/hv41tWRoVmtohoCk8BMIntF753EV3AzwSWxR0yDrhV0QLhVkQXg73CGoJ3iR5gl8yQsPB2KVGnpTBFXquA24mmFRUSrXF4KWz+FjhWUj7R+op7U9SZ7DwI5/0rtk+Bgmg62Miw0FjAmhSxIWqvz8K0rznAoeE3ZjaDaDrOPElLiG6v28DM3gPuJFrHsTjk1jTu3EuILqY7Sro2WZwy8roCeDScx4Yy9n2SaArU4vA5XlbG/i8TdTjTWjBN8s+gL3CzpLeJzj9VW19CNG2tZ6g3fuTKOeecc65GUqK7hWzbKC0ysxNLv65pJBWbWU4Vxc4JoxKEb/6bmtmNVVFXTRfWh2wwM5PUjWjhd6UuUGjdurUVFRVVZkiXgs+TzTxv88zzNs8sb+/M8zbPrPj2lpRvZh3Kc3xZc8pPkLSW6Bvx+uE14b2ZWXnn7LudnSfpdqLP4r9Az+ymU621Bx5RtGp8NdF0Leecc845l6aUnQcz2yNW/knqD1xcqniCmd1fGfETjTpIepTtt0qNGWZmo8sZezw7TmNC0jlEt42N97GZdS1P7GyrivOoyGdtZnOAHdbISDqe6G5K8Taa2cm7mqNzzjnnXHW1q3ez2a2EC8dK6SiUo86UD0KrYOzpJLhV7Z6mKs6jsj9rM1tC9NwP55xzzjlXhnSfMO2cc84555yr4bzz4JxzzjnnnEuLdx6cc84555xzafHOg3Nut/bwww9z7LHHctxxx9G9e3e+++47Xn31VU488USuuOIKLr/8crZs2ZLtNJ1zzrkawTsPzrnd1ieffMJf/vIXFi5cyNKlSykpKeHZZ5/l8ssvZ9y4cYwePZrDDz+cv/3tb9lO1TnnnKsRvPOwm5P0ZvjdQlJZT2Kuivp7SnqkCuMfHZ7e/I6kVrHzLcfxfcPD3yorn4GSbqmseK7itmzZwoYNG9iyZQvr169n3333pV69ehx11FEAnH322UyaNCnLWTrnnHM1Q7W4VWt1ZmanhpctgMuAZ7OXTZXoArxkZneH96eW3kFSbTMrSXJ8X2AssL6K8iuXDZtLaNFvWrbT2OMtH3weAM2aNeOWW26hefPm1K9fn86dO3PJJZdw2223sXDhQgAmTpzIihUrspmuc845V2PIzLKdg0tBUrGZ5UiaD7QBPgb+BvwFGAzkAvWAR83sCUm5wD3AZ0TPL3gBWALcCNQHupjZf5LUdTFwN1ACrDGzMyT1BH4O7AO0Al40s9vC/t2BO4ieOD7NzH4fyxl4AugIfAN0M7MvEtT3M+CpUN/7ZtYx7nxzQy6rwnmcBDwPHArUBv4AHAwMBYqAL82sY4I6agN/BToABjxlZg9LuhroDdQFPgT+z8zWSxoIFJvZUEmtgEeBJkSdk6vNbFmCOnqHWDRu3KT9gD+PStS8rhyOb9YQgHXr1nH33XczYMAAcnJyGDhwIGeeeSaHHHIITzzxBN999x0nn3wy8+fPZ9Qob/dMKC4uJidnp+dmuirkbZ5Z3t6Z522eWfHt3bFjx3wz61Ce433kYc/RD7jFzM6HbResa8zsJEn1gLmSZoR9TyDqaHwNfAQ8aWY/lHQjcAPRt/WJDADOMbNPJDWKK28LtAM2AkWShhNd8D8AtCfqIMyQ1MXMJgP7AovM7HeSBhB1Aq4vXZmZ/UPSCMLFeoJ8fggcZ2YfS7oQ+NTMzgvn39DM1ki6GehoZl8mOae2QDMzOy4cFzuvF8xsVCi7D+gFDC917Eigj5l9IOlk4DHgrATnMTLsS/OW37eHlvg/q4pa3iMXgAkTJtCuXTu6dOkCwKeffsr8+fO5//77ue6668jLy2PTpk1s3LiR3Nzc7CVcg+Tl5XlbZ5i3eWZ5e2eet3lmVbS9/Spnz9UZ+IGki8L7hsCRwCZggZmtApD0HyDWqVhCNBqQzFxgjKTniUYsYmaZ2ZoQ7z3gcOBAIC82oiDpGeAMYDKwFRgfjh1bKlZ5vG1mH8flPlTSA8BUM5uTZoyPgJahwzON7W1xXOg0NAJyKPUkbEk5RFOoJkiKFdcrq7L6dWpTFKbcuIpr3rw58+fPZ/369dSvX59Zs2bRoUMHPv/8cw466CA2bdrEAw88QP/+/bOdqnPOOVcjeOdhzyXgBjMrfdGbSzRCELM17v1WUnzmZtYnfMN+HlAgqW3YFB+vJMRQ6eNT2NW5cd/G5fa+pPbAz4BBkmaY2b1lVmz2jaQTgHOA64BLgCuBMURTuArD1KzcUofWAlabWVtc1px88slcdNFFnHjiiey11160a9eO3r17c+eddzJ16lS+/fZbbr75Zs46a6cBIeecc85VAb/b0p5jHdAg7v104BpJdQAkHSVp34pUIKmVmb1lZgOAL4HDUuz+FnCmpMZhXUF34PWwrRYQGxG5DHijInmF3A4B1pvZWKJ1DieGTaXbpfRxjYFaZjYJuCvuuAbAqtB+PUofZ2ZrgY/DOhAUOaGi5+HK75577mHZsmUsXbqUp59+mnr16jFkyBD+/e9/8/e//52+fZPNwnPOOedcZfORhz3HYmCLpEKib82HEd2BaZGieTVfEN25qCKGSDqSaFRhFlBItGZgJ2a2StLtwGth/3+Y2Uth87fAsZLygTXApRXMC+D4kN9WYDNwTSgfCfxT0qpEC6aBZsBoSbGO8u3h911EHaD/Ek2JStQB6QE8LulOoA4wjqhNnHPOOedqJO887ObMLCf83gx0KrX5jvATLy/8xI7PjXu9w7YEdf0yQfGY8BPb5/y418+S5NaxZnYX0QV6SmY2sNT72PnukGuYnrXDFK1QPpydFzrHby9k+2hDfPnjwOOp8gnrLc4t6xycc84552oKn7bknHPOOeecS4uPPNRAkvoDF5cqnmBm91dG/NjoQak6HwV+XKp4mJmNrow6Qx1vsfMdkf7PzJZUVh3OOeecczWZdx5qoNBJqJSOQjnqvC4DdZxc1XU455xzztVkPm3JOeecc845lxbvPDjnnHPOOefS4tOWnHNVpqioiEsv3X6n3o8++oh7772XTz75hJdffpm6devSqlUrRo8eTaNGjbKYqXPOOefS4SMPzrkq07p1awoKCigoKCA/P5999tmHrl27cvbZZ7N06VIWL17MUUcdxaBBg7KdqnPOOefS4J2HKiTpzfC7haTLsp1PPEk9w1Obs1F3X0n7xL0vLsexAyXdUsn5vCJptaSppcqfkVQkaamkp2JP83a7ZtasWbRq1YrDDz+czp07s9de0cDnKaecwsqVK7OcnXPOOefS4dOWqpCZnRpetgAuI8kD1bKkJ7AU+DQLdfcFxgLrs1B3IkOAfYDflCp/BvhVeP0scBUJHiwXb8PmElr0m1bpCe5plg8+b6eycePG0b17953Kn3rqqR2mNjnnnHNu9+UjD1Uo7hv1wcDpkgok3SSptqQhkhZIWizpN2H/XEmvS3pe0vuSBkvqIeltSUsktUpR18GSXpRUGH5ODSMe/5Y0StK7kmZIqi/pIqAD8EzIqX6SmMsl/VHSPEkLJZ0oabqk/0jqE/ZROJelIcdL484lT9JEScvCt/iS9FvgEOA1Sa/F1XV/yHu+pIPTbN+rQxsWSpoUG82Q1CrEWSDp3rJGNsxsFrAuQfk/LADeBg5NJy+3s02bNjFlyhQuvnjHx4vcf//97LXXXvTo0SNLmTnnnHOuPBRdF7mqIKnYzHIk5QK3mNn5obw3cJCZ3SepHjCX6KFthwOTgTbA18BHwJNmdrekG4EjzKxvkrrGA/PM7M+SagM5wP7Ah0AHMyuQ9DwwxczGSsoLOS1Mkf9y4AEze1zSw0Anoge97Q28a2YHSboQ6AOcCzQGFgAnA62Bl4BjiUY35gK3mtkbIW4HM/sy1GPAz83sZUkPAmvN7L4kOQ0Eis1sqKQDzeyrUH4f8JmZDQ/Tj54xs+dCJ2doogfXlYqbS9xnVGpbHeAt4EYzm5Nge2+gN0Djxk3aD/jzqFRV1QjHN2u4w/s33niDl156iSFDhmwre+WVV3j55Zd56KGH2HvvvXepnuLiYnJyUn60rpJ5m2eet3lmeXtnnrd5ZsW3d8eOHfPNrEN5jvdpS9nRGfhBGAEAaAgcCWwCFpjZKgBJ/wFmhH2WAB1TxDwL+DWAmZUAayTtD3xsZgVhn3yiKVTlMSWu/hwzWwesk/SdpEbAacBzoc7PJL0OnASsBd42s5XhXApC3W8kqGMTEFtvkA+cnWZux4VOQyOiztL0UP4joEt4/SwwNM14yTwGzE7UcQAws5HASIDmLb9vDy3xf1bLe+Tu8H7EiBFce+215OZG5a+88gpTpkzh9ddfp0mTJrtcT15e3raYLjO8zTPP2zyzvL0zz9s8syra3n6Vkx0CbjCz6TsURt9+TlZ9XgAAIABJREFUb4wr2hr3fiu79nnFxysBEk5RSuP4+Fzi81E56k6W/2bbPgSWar/SxgBdzKxQUk8gN83j0ibpbqAJO6+HSKh+ndoUJZjvX5OtX7+emTNn8sQTT2wru/7669m4cSNnnx31E0855RRGjBiRrRSdc845lybvPGTGOqBB3PvpwDWSXjWzzZKOAj6pYB2zgGuA2LSlfcuZ066aDfxG0t+AA4AzgFuBo9Oo+8sK1t0AWBWmFfVgexvOBy4ExgPddjW4pKuAc4BOZra1grnWWPvssw9fffXVDmUffvhhlrJxzjnnXEX4gunMWAxsCQt7bwKeBN4DFklaCjxBxTtyNwIdJS0hmvpzbBn7jwFGpFownaYXic6vEHgVuM3M/lfGMSOBf8YvmN5FdxGtRZgJLIsr7wvcLOltoCmwJlUQSXOACUAnSSslnRM2jQAOBuaFdhpQwXydc8455/ZoPvJQhWKLdM1sM9Fi43h3hJ94eeEndnxu3OsdtiWo6zPgFwk2HRe3z9C415OASWXk3yLu9RiiDsdO24hGGm4tdewO+ZrZ9XGvhwPD497nxL2eCExMkdPAuNePk/jWqZ8Ap5iZSeoGJF0UHuKcnqTc/30455xzzsXxiyNXHbUHHpEkYDVwZZbzcc4555yrFrzzsIeR1J/otq7xJpjZ/RWI+SJwRKni35de0J1JFTnPcFekE0rFOx54utSuG83s5Aol6pxzzjlXg3jnYQ8TLp53uaOQJGbXyoxXGSr7PM1sCdC2suI555xzztVEvmDaOeecc845lxbvPDjnnHPOOefS4p0H55xzzjnnXFp8zYNzrlKtXr2aq666iqVLlyKJp556ij//+c8UFRVt296oUSMKCgqynKlzzjnnyss7D865SnXjjTdy7rnnMnHiRDZt2sT69esZP378tu2/+93vaNiwYRYzdM4559yuqvbTliQNlHRLiu1dJB2zi7H7SPp1eN1T0iG7mme2SbpX0k/C676S9sl2TjGS2kr6WRn79JT0SCXX20jSREnLJP1b0o8qM351tHbtWmbPnk2vXr0AqFu3Lo0aNdq23cx4/vnn6d69e7ZSdM4551wF+MgDdAGmAu+V90AzGxH3tiewFPi0ctLKLDMbEPe2LzAWWJ+ldEprC3QA/pHheocBr5jZRZLqAmV2qDZsLqFFv2lVn9luZvng8wD46KOPaNKkCVdccQWFhYW0b9+eYcOGse+++wIwZ84cDj74YI488shspuucc865XSQzy3YOlS48YOzXwArgCyAfWAP0BuoCHwL/R3RROjVsWwNcGEI8CjQhuni+2syWJalnIFAMLAfGAJ8AG4AfAccAfwJygC+Bnma2SlIe8A7RU5CbhDxvB44HxpvZnSnOazJwGLA3MMzMRkq6BjjCzG4L+/QE2pvZDZLuAnqEdvgSyDezoUlijwltcQgwFCgCvjSzjpI6A/cA9YD/AFeYWbGk5cCzQEegTmjfQcD3gSGlOlel67uN6DPYCvzTzPqFtnkrxGsE9ArvPwTqh/YdZGbjE8TrCXQws+slXQDcSfRZfwX0MLPPJDUJ+R4ILADODW31ZYJ4+wGFQEsr4x+JpN7h3GncuEn7AX8elWr3aun4ZtE0pKKiIq699lqGDx/OMcccw/Dhw9l333258sroId8PP/wwzZo145JLLqmUeouLi8nJyamUWC493uaZ522eWd7emedtnlnx7d2xY8d8M+tQnuOrXedBUnuiC/mTiUZWFgEjgNFm9lXY5z7gMzMbHrtoNrOJYdssoI+ZfSDpZKKL1bOS1DUQKDazoeHC9xYzWyipDvA68Asz+0LSpcA5ZnZl7ALZzH4v6Ubg90Qdia+JLsxPiOWZoL4DzOxrSfWJLn7PJJp6Ns/Mvh/2+SfRw9W+A54k6sjE2uGJsjoPZjYxdAo6mNmXkhoDLwA/NbNvJf0eqGdm94b9HjCzxyU9DHQCfkzUuXnXzA5KUtdPgbuAn5jZ+rjzyiPq4PwuTFO62cx+Et8xSBQvxNy2j6T9gdVmZpKuAtqEmI8An5jZIEnnAv8EmiTpPLQFRhKNSJ1A1AG90cy+TZYDQPOW37dalwxLtUu1FBt5+N///scpp5zC8uXLgWikYfDgwUybNo0tW7bQrFkz8vPzOfTQQyul3ry8PHJzcysllkuPt3nmeZtnlrd35nmbZ1Z8e0sqd+ehOk5bOh140czWA0iaEsqPC52GRkSjAdNLHygpBzgVmCApVlxvF3JoDRwHzAxxagOr4rbHclpCdJG9KtT/EdHIQsLOA/BbSbGnQR8GHGlm8yV9JOkU4INQ91zgRuAlM9sQYr+8C+cBcArRKMrccC51gXlJziXHzNYB6yR9J6mRma1OEPMnRJ259QBm9nXcthfC73ygxS7mfCgwXlLTkO/Hofw0oGuo8xVJ36SIsRdwInCDmb0laRjQj6jTk1T9OrUpChfSNdH3vvc9DjvsMIqKimjdujWzZs3imGOiJUX/+te/OProoyut4+Ccc865zKuOnQeARMMpY4AuZlYYvqXOTbBPLaJvrNtWsH4RdQqSLbDdGH5vjXsde5/wM5GUS3TR/aPwbX0e0Tf8AOOBS4BlRB0nU1zvp4IEzDSzZCtcy30uIWayIa9YjJIUx5dlOPAnM5sS2m1gXL3pWgmsNLO3wvuJRJ0HV4bhw4fTo0cPNm3aRMuWLRk9ejQA48aN84XSzjnn3B6uOt5taTbQVVJ9SQ2AC0J5A2BVmFLUI27/dWEbZrYW+FjSxQCKnJBmvdviEK0XaBK7O4+kOpKOrchJAQ2Bb0LH4WiiEYGYF4gWfncn6kgAvAFcIGnvMKJSnq/D489lPvBjSbFpUftIOqoC5wEwA7gydkcnSQeUI590NCRaHwFweVz5G0SdLMI6jv2TBTCz/wErJLUORZ3YhUX1NVHbtm1ZuHAhixcvZvLkyey/f9TMY8aMoU+fPlnOzjnnnHMVUe06D2a2iOgCugCYBMwJm+4iWnw7k+gb+phxwK2S3pHUiqhj0UtSIfAu8Is0qx4DjJBUQDRN6SLggRCngGg6VEW8AuwlaTHwB6KLegDM7BuiC9vDzeztULaAaEpRIVHnYiHRovB0jAT+Kek1M/uC6E5Sz4W65wNHV+REzOyVkNvC0F5Jb6UbvAYcI6kgrB8py0CiqWdziBaKx9wDdJa0CPgp0VSydSni3AA8E867LfDHNOp2zjnnnKu2qt2CabedpJxwV6R9iEZkeofOVY0kqR5QYmZbwqjQ45UwRW0HrVu3ttiTlF3V80V2medtnnne5pnl7Z153uaZ5QumXSojFT0Ab2/gbzW54xA0B56XVAvYBFyd5Xycc8455/Yo3nlIQ3huxMWliieY2f1VUNeBwKwEmzolu4VrMmZ2WYL4jxLdTjXeMDMbXZ7Y6ZB0PPB0qeKNZnZyBWJeQXQnqXhzzey6so41sw+AdqXiVVp7O+ecc85Vd955SEPoJFR6RyFJXV8Rza+vqvhlXmRXYl1LqORzCZ2cSuvoVHV7O+ecc85VJ9VuwbRzzjnnnHOuanjnwTnnnHPOOZcW7zw458pt9erVXHTRRRx99NG0adOGefPm8fXXX3P22Wdz5JFHcvbZZ/PNN6ke4O2cc865PZF3Hpxz5XbjjTdy7rnnsmzZMgoLC2nTpg2DBw+mU6dOfPDBB3Tq1InBgwdnO03nnHPOVbLdovMgaaCkpA8Kk9Ql3HK0surrKemRyoq3p5NUnMY+YyRdlIl8ktR/Rxr7lHke5azzYknvStoqqVz3QK7O1q5dy+zZs+nVqxcAdevWpVGjRrz00ktcfnn0QO/LL7+cyZMnZzNN55xzzlWBPeVuS12AqURPUXY10x1k/gnPS4FfAk+ke8CGzSW06Det6jLKouWDzwPgo48+okmTJlxxxRUUFhbSvn17hg0bxmeffUbTpk0BaNq0KZ9//nk203XOOedcFcjayIOk/pKKJP0LaB3Krpa0QFKhpEmS9pF0KvBzYIikAkmtws8rkvIlzZF0dIp6Lpa0NMScHbfpkBDjA0kPxu3fXdKScMwDceXFkh6StEjSLElNUtSZ6DwaSloeHlBGKFshqY6kkyQtljRP0hBJS1PE/oekH4TX70gaEF7/QdJV4fWtof7Fku6JO/ZXkt4O7fiEpNqlYjcOOZynyCOS3pM0DTgobr8BIf5SSSPDvq0kLYrb50hJ+SnO4yRJb4Y2eltSgzAi9ELpz0XSYKB+yPuZZDHjYueEz2hR+Cx/EbftLknLJM2U9FyqES8z+7eZ+eOiS9myZQuLFi3immuu4Z133mHffff1KUrOOedcDZGVkQdJ7YFuRA/s2gtYBOQDL5jZqLDPfUAvMxsuaQow1cwmhm2zgD5m9oGkk4HHgLOSVDcAOMfMPpHUKK68bah/I1AkaThQAjwAtAe+AWZI6mJmk4F9gUVm9rtwwX43cH2SOpOdRyFwJvAacAEw3cw2SxoN9DazN8OFciqzgdMlLQe2sP2Bb6cBYyV1Bo4EfggImCLpDOAL4FLgx6HOx4AewN9DngcDU4A7zWympF8SdeqOBw4mGvV5KtT1iJndG457GjjfzF6WtEZSWzMrAK4AxiQ6AUl1gfHApWa2QNJ+wIaweafPxcz6SbrezNJ9HsN3QFczWyupMTA//A21By5k57+7CpHUG+gN0LhxEwYcv6WiIXdLeXl5AHz99dc0btyYDRs2kJeXR6tWrXj22WfZb7/9mDRpEgceeCBfffUVDRo02HZMVSkuLq7yOtyOvM0zz9s8s7y9M8/bPLMq2t7ZmrZ0OvCima0HCBd2AMeFi+1GQA4wvfSBknKAU4EJkmLF9VLUNRcYI+l54IW48llmtibEfA84HDgQyDOzL0L5M8AZwGRgK9EFL8DYUrFKS3Ye44ku4F8j6jw9Fjo0DczszbDPs8D5KWLPAX4LfAxMA86WtA/QwsyKJF0NdAbeCfvnEHUmfkB08bwgtFt9IDavpA7RU5avM7PXQ9kZwHNmVgJ8KunVuBw6SroN2Ac4AHgXeBl4ErhC0s3hPH+Y5BxaA6vMbAGAma0FCHkl+lxWpGiPRAT8MXSatgLNiDpApwEvmdmGEP/lcsZNyMxGAiMBmrf8vj20ZE+ZDVg+y3vkbnv98MMP07RpU1q3bk1eXh6nn346AB988AEXXnghgwcPplu3buTm5iYOVkny8vKqvA63I2/zzPM2zyxv78zzNs+sirZ3Nq9yLEHZGKCLmRVK6gnkJtinFrA63W+hzaxPGJ04DyiQFDtuY9xuJURtodLHpwqdYtsYEp/HFGCQpAOILuRfBfYrR50AC4AOwEfATKAxcDXbv0EXMMjMdpinL+kG4G9mdnuCmFvC8ecAr8eV73SOkvYmGunpYGYrJA0E9g6bJxGNyLwK5IenNyeiRLGDRJ9LefUAmgDtwyjL8pBjeT7fXVK/Tm2KwtqA6mz48OH06NGDTZs20bJlS0aPHs3WrVu55JJL+Otf/0rz5s2ZMGFCttN0zjnnXCXL1pqH2UBXSfUlNSCawgPQAFglqQ7RBWDMurAt9i31x5IuBgjz7U9IVpGkVmb2lpkNAL4EDkuR11vAmWHuf22gO9svpmsBsbsNXQa8kSJOwvMws2LgbWAY0TSsEjP7Blgn6ZSwW7cUcTGzTUTfxF8CzCcaibgl/IZolOPKMEKDpGaSDiIaWbgovEbSAZIOj4UFrgSOltQvlM0GukmqLakp0DGUxzoKX4Y6tt2Bycy+C/U/DoxOcRrLiNacnBRyaSCprE7C5tCe6WgIfB46Dh2JRi8g+swukLR3yL36X+VXkbZt27Jw4UIWL17M5MmT2X///TnwwAOZNWsWH3zwAbNmzeKAAw7IdprOOeecq2RZGXkws0WSxgMFwH/ZfuF7F9EF/H+BJYQOAzAOGCXpt0QXqz2AxyXdSTTlZhxQmKS6IZKOJPrWeVbYL+GohZmtknQ70bQiAf8ws5fC5m+BY8Mi4DVE03KSSXYeEE1dmsCOoyq9wvl9C+SF+KnMATqZ2XpJc4BDQxlmNkNSG2BemAZUDPzKzN4L7TVD0aLtzcB1IUfMrERSN+BlSWuJOgBnhfzfJ3SizGy1pFGhfDnRSEi8Z4juUDQjWfJmtknSpcBwSfWJ1jv8pIxzHgkslrTIzHqUse8z4TwWEv2NLQv1LghT5ArDeS8kRVtL6goMJxrFmCapwMzOKaNu55xzzrlqS2apZt+4GEnFZpZTRbFzwqgE4Zv/pmZ2Y1XUVdXC3Ysamtld2c4lkVhbh3Uis4kWqi8q67h0tW7d2oqK/AZNmeLzZDPP2zzzvM0zy9s787zNMyu+vSXlm1m5nmVVPVd27nnOCyMeexF9I94zu+nsGkkvAq1Ifuer3cFIRQ8c3JtoDUildRycc84556q7atN5kNQfuLhU8QQzu78y4icadZD0KNtvlRozzMxSzfdPFHs82+/kFIt9DtFtY+N9bGZdyxM7kxLlFjoUR5Qq/r2Z7XQnrXRIOpBo+llpnVIs0I7P8bIEMSvlc3TOOeecq+6qTechdBIqpaNQjjqvq8LY00lwq9o9TWV3dkIHId3nPaQbs8o+R+ecc8656iRrT5h2zjnnnHPO7Vm88+Ccc84555xLi3cenHPOOeecc2nxzoNzLqUWLVpw/PHH07ZtWzp02PFubkOHDkUSX375ZZayc84551wmVZsF0865qvPaa6/RuHHjHcpWrFjBzJkzad68eZaycs4551ymZX3kQdLA8GCxZNu7hPvyV1Z9PSU9Ulnx9nSSiqsgZgtJSysxXq6kU8vYJ+Xf0S7UebikfEkFkt6V1KeyYlcXN910Ew8++CDhSebOOeecqwH2hJGHLsBU4L1sJ+KyJhcoBt7MYJ2rgFPNbKOkHGCppClm9mmqgzZsLqFFv2mZybAKLR983rbXkujcuTOS+M1vfkPv3r2ZMmUKzZo144QTTshils4555zLtKyMPEjqL6lI0r+A1qHsakkLJBVKmiRpn/Bt88+BIeEb4Fbh55XwrfAcSUenqOdiSUtDzNlxmw4JMT6Q9GDc/t0lLQnHPBBXXizpIUmLJM2S1CRFnYnOo6Gk5ZJqhX32kbRCUh1JJ0laLGmepCGpvrGX9A9JPwiv35E0ILz+g6SrwutbQ/2LJd0Td+yvJL0d2vEJSbVLxW4ccjgvWZwwovBvSaPCt/EzJNUP29qHc54HpHxugqTakoaGtl4s6YZQvlzSPaGdl0g6WlILoA9wU8j99FSxk30GobyVpPlh272pRl3MbJOZbQxv67EbjNJly9y5c1m0aBH//Oc/efTRR5k9ezb3338/9957b7ZTc84551yGZXzkQVJ7oBvQLtS/CMgHXjCzUWGf+4BeZjZc0hRgqplNDNtmAX3M7ANJJwOPAWclqW4AcI6ZfSKpUVx521D/RqBI0nCghOiJzu2Bb4AZkrqY2WRgX2CRmf0uXLDfDVyfpM5k51EInAm8BlwATDezzZJGA73N7E1Jg8tovtnA6ZKWA1vY/lTk04CxkjoDRwI/BARMkXQG8AVwKfDjUOdjQA/g7yHPg4EpwJ1mNjNFnP8Xyrub2dWSngcuBMYCo4EbzOx1SUPKOI/eRE+dbmdmWyQdELftSzM7UdK1wC1mdpWkEUCxmQ0tI27MTp8BMBwYRvTk6OeUxjQkSYcB04DvA7cmG3WQ1DucE40bN2HA8VvSTHP3lZeXt8P7999/H4B27doxZswY3n//fVq3bg3AF198wbHHHsvjjz/OAQccUDpUlSouLt4pV1e1vM0zz9s8s7y9M8/bPLMq2t7ZmLZ0OvCima0HCJ0DgOPChV4jIIcET1dWNH3kVGCCts+zrpeirrnAmHCR+0Jc+SwzWxNivgccDhwI5JnZF6H8GeAMYDKwFRgfjh1bKlZpyc5jPNEF/GtEnafHQoemgZnFpuM8C5yfIvYc4LfAx0QXtWeHb9VbmFmRpKuBzsA7Yf8coov9HxB1ihaEdqsPfB72qQPMAq4zs9dDWeckcf4f8LGZFYTyfKCFpIZAo7jjnwZ+muI8fgKMMLMtAGb2ddy2WNvmA79MESOVZJ/Bj4imwUHU1ik7I2a2AviBpEOAyZImmtlnCfYbCYwEaN26td3Q4xe7mPbu59tvv2Xr1q00aNCAb7/9ljvuuIMBAwbw1FNPbdunRYsWLFy4cKcF1ZmQl5dHbm5uxuutybzNM8/bPLO8vTPP2zyzKtre2VrzYAnKxgBdzKxQUk+iee6l1QJWm1nbtCox6xNGJ84DCiTFjtsYt1sJUTuUZ9VnovxjxpD4PKYAg8K37O2BV4H9ylEnwAKgA/ARMBNoDFxNdKEN0TkMMrMn4g8K04L+Zma3J4i5JRx/DhC7+E8WpwU7t139sH+qNikt1f6x+LHPZVeMoey/pbSZ2aeS3iXq+E6sSKw9zWeffUbXrl0B2LJlC5dddhnnnntulrNyzjnnXLZkYx73bKCrpPqSGhBN4QFoAKySVIdoSk3MurANM1sLfCzpYgBFkq7YlNTKzN4yswHAl8BhKfJ6CzgzzP2vDXRn+8V0LeCi8Poy4I0UcRKeh5kVA28TTZ2ZamYlZvYNsE7SKWG3biniYmabgBXAJcB8opGIW8JviL5hvzKM0CCpmaSDiEYWLgqvkXSApMNjYYErgaMl9SsjTrK8VgNrJJ0Winok2zeYAfSRtFcsnzL23/Y3kKZkf0vziaZZQRltLenQuPUc+xNNESsqRw7VQsuWLSksLKSwsJB3332X/v3777TP8uXLszLq4JxzzrnMy3jnwcwWEU3hKQAmsf3C9y6iC/iZwLK4Q8YBtypaINyK6GKwV1hD8C6Qao7IkLDwdilRp6UwRV6rgNuJphUVEq1xeCls/hY4VlI+0fqKVCtFk50H4bx/xfYpUBDNxx8ZFhoLWJMiNkTt9VmY9jUHODT8xsxmEE3HmSdpCdG35A3M7D3gTqJ1HItDbk3jzr2E6GK6o6Rrk8UpI68rgEfDeWwoY98niaZALQ6f42Vl7P8yUYczrQXTJP8M+gI3S3qb6PxTtXUb4K2Q3+vAUDNbkkbdzjnnnHPVlszKM9ukZpJUbGY5VRQ7J4xKEL75b2pmN1ZFXTVdWB+ywcxMUjeihd+VukChdevWVlRU4wYossbnyWaet3nmeZtnlrd35nmbZ1Z8e0vKN7MO5Tl+T3jOQ3V3nqTbiT6L/wI9s5tOtdYeeETRqvHVRNO1nHPOOedcmqpF50FSf+DiUsUTzOz+yoifaNRB0qNsv1VqzDAzG13O2OPZcRoTks4hum1svI/NrGt5YmdbVZxHRT5rM5sD7LBGRtLxRHeHirfRzE7e1Rydc84556qratF5CBeOldJRKEedKR+EVsHY00lwq9o9TVWcR2V/1mEdQ1p373LOOeecq+lq7FNznXPOOeecc+XjnQfnnHPOOedcWrzz4JxzzjnnnEuLdx6cc9uUlJTQrl07zj//fABmzZrFiSeeSNu2bTnttNP48MMPs5yhc84557KpxnUeJA2UdEuK7V0kHVPJdb4ZfreQVNYD0bJid85RUk9Jh5SxT56kct2nuIx4R0uaJ2ljqr+X6mbYsGG0adNm2/trrrmGZ555hoKCAi677DLuu+++LGbnnHPOuWyrFndbqmRdgKnAe5UV0MxODS9bED1N+dnKil1ZdvMcewJLgU8zWOfXwG+J/h7StmFzCS36TauajKrA8sHnbXu9cuVKpk2bRv/+/fnTn/4EgCTWrl0LwJo1azjkkJR9OOecc85VczVi5EFSf0lFkv4FtA5lV0taIKlQ0iRJ+0g6Ffg5MERSgaRW4ecVSfmS5kg6OkU9B0t6McQsDPGQVBx2GQycHmLfFOK1jTt+rqQfJIn9Q0lvSnon/I6dx1uSjo3bL09Se0lNJM2UtEjSE5L+K6lxityT5Vhb0pDQVosl/SbsnyvpdUnPS3pf0mBJPSS9LWmJpFblaacw4vFvSaMkvStphqT6ki4COgDPhJzqJ4sbF/9xSQtDnHviyn8maZmkNyT9RdLUZDHM7HMzWwBsLqu+6qJv3748+OCD1Kq1/b+FJ598kp/97GcceuihPP300/Tr1y+LGTrnnHMu26r9yIOk9kA3oB3R+S4C8oEXzGxU2Oc+oJeZDZc0BZhqZhPDtllAHzP7QNLJwGPAWUmq+wvwupl1lVQbKP1wuX7ALWZ2foj9NdG36n0lHQXUM7PFSWIvA84wsy2SfgL8EbgQGAdcAtwtqSlwiJnlS3oEeNXMBkk6F+idZpOVzrE3sMbMTpJUD5graUbY9wSgDdG39B8BT5rZDyXdCNwA9C1HO+0PHAl0N7OrJT0PXGhmYyVdH3JamOY59Dezr0PsWaFD9j7wBFEbfizpuTRjlSm0UW+Axo2bMOD4LZUVusrl5eUBMG/ePDZv3sy6desoKCjgq6++Ii8vjwEDBvCHP/yBY445hnHjxtG9e3duvfXW7CYdp7i4eNs5uMzwNs88b/PM8vbOPG/zzKpoe1f7zgNwOvCima0HCJ0DgONCp6ER0cXrTg8zk5QDnApMkBQrrpeirrOAXwOYWQmwpozcJgB3SboVuBIYk2LfhsDfJB0JGFAnlD8PzATuJupETAjlpwFdQy6vSPqmjFyS6Qz8IIwAxPI4EtgELDCzVQCS/gPEOhVLgI4pYu7UTpL2J3r6dEHYJ59oCtWuuCRc0O8FNAWOIRpl+8jMPg77PEf6HaqUzGwkMBKgecvv20NL9px/Vst75AIwffp08vPz6dmzJ9999x1r165lyJAhfPLJJ1x77bUAtGzZknPPPZfc3NzsJVxKXl7ebpVPTeBtnnne5pnl7Z153uaZVdH23nOucirGEpSNAbqYWaGknkBugn1qAavNrEqeQGxm6yXNBH5BdOGfasHvH4DXwrf1LYC8EOMTSV+Fb9cvBX4T9leiILtAwA3hadHbC6VcYGNc0da491vZtb8En5SKAAAgAElEQVSt+HglQJlTlEqTdARwC3CSmX0jaQywN5XXHinVr1Oborh1BHuKQYMGMWjQICD6T2Xo0KFMnjyZ733ve7z//vscddRRzJw5c4fF1M4555yreWrCmofZQNcwf74BcEEobwCsklQH6BG3/7qwDTNbC3ws6WIARU5IUdcs4Jqwb21J+5Xavi12nCeJpvEsMLOvU8RuCHwSXvcstW0ccBvQ0MyWhLI3iDokSOpMNC0oHaVznA5cE9oJSUdJ2jfNWMmU1U5l5ZTKfsC3RKMZBwM/DeXLgJah4wVRR8ulsNdeezFq1CguvPBCTjjhBJ5++mmGDBmS7bScc845l0XVvvNgZouA8UABMAmYEzbdBbxFNOVnWdwh44Bbw8LkVkQdi16SCoF3iUYJkrkR6ChpCdG0m2NLbV8MbAmLhG8K+eUDa4HRZZzKg8AgSXOB2qW2TSRa1/F8XNk9QGdJi4guoFcRXYSXpXSOTxLdeWqRpKVE6wYqOmJVVjuVNgYYkc6CaTMrBN4h+qyeAuaG8g3AtcArkt4APiPFtDJJ35O0ErgZuFPSyjQ6OdVCbm4uU6dGa8m7du3KkiVLKCwsJC8vj5YtW2Y5O+ecc85lU42YtmRm9wP3J9j0eIJ95xLNkY93bpr1fEaCzoWZ5YTfm4FO8dsUPb+gFtvXCySLPQ84Kq7orlL1lv4s1wDnhAXWPwI6mtlGkkiVI3BH+ImXF35ix+fGvd5hW4K6ErYTcFzcPkPjXk8i6vglVar+nkl2e83Mjla0gOVRIOkCbDP7H3Boqjqdc84552qaGtF52F1J+jVRp+ZmM9tayeGbA89LqkW0uPnqSo6/J7pa0uVAXaLRiSeynI9zzjnn3B7FOw+7QFJ/4OJSxRPCCEfazOzvwN9Lxb6CaFpPvLlmdl05Y39AdHva+NgHEq03KK2TmX1VnvjpqKx2KhXzReCIUsW/L72gOxEzexh4uFS8Smlv55xzzrmawDsPuyDFNKjKiD2astc/7Grsr4AquXNUkvoqvZ3MrGslx6uy9nbOOeecq26q/YJp55xzzjnnXOXwzoNzzjnnnHMuLd55cM4555xzzqXF1zw45wAoKSmhQ4cONGvWjKlTp3L66aezbl30aJDPP/+cH/7wh0yePDnLWTrnnHMum7zz4GoESQOB4vjnR7gdDRs2jDZt2rB27VoA5syZs23bhRdeyC9+ker5iM4555yrCXzaknOOlStXMm3aNK666qqdtq1bt45XX32VLl26ZCEz55xzzu1OfOTBVVvhORO/BlYAXwD5kq4GehM9KO5D4P+A2sBi4Cgz2yxpv/D+SOAaoA+wBXjPzLqlqnPD5hJa9JtWRWdUuZYPPm/b6759+/Lggw9um6YU78UXX6RTp07st99+mUzPOeecc7shH3lw1ZKk9kA3ogfl/RI4KWx6wcxOMrMTgH8DvcxsHZAHxK6muwGTzGwz0A9oZ2Y/IOpEVDtTp07loIMOon379gm3P/fcc3Tv3j3DWTnnnHNudyQzy3YOzlU6SX2BA8xsQHj/J+BTYAFwH9AIyAGmm1kfST8GbjOzX0iaB1xtZkslvQIUA5OByWZWnKCu3kSjGTRu3KT9gD+PysAZVtzxzRoCMGrUKGbMmEHt2rXZtGkT69ev5/TTT6d///6sWbOGX//610yYMIG6detmOeOdFRcXk5OTk+00ahRv88zzNs8sb+/M8zbPrPj27tixY76ZdSjP8T5tyVVniXrGY4AuZlYoqSeQC2BmcyW1kHQmUNvMlob9zwPOAH4O3CXpWDPbskMlZiOBkQCtW7e2G3rsWQuLc3Nzt73Oy8tj6NChTJ06FYARI0bQpUsXOnfunKXsUsvLy9shf1f1vM0zz9s8s7y9M8/bPLMq2t4+bclVV7OBrpLqS2oAXBDKGwCrJNUBepQ65u/Ac8BoAEm1gMPM7DXgNraPVtQY48aN8ylLzjnnnNvGRx5ctWRmiySNBwqA/wKx+47eBbwVypYQdSZiniGa0vRceF8bGCupISDgYTNbnYH0syY3N3enkQjnnHPOuRjvPLhqy8zuB+5PsOnxJIecBkyMdRDCgunTqig955xzzrk9jncenAMkDQd+Cvws27k455xzzu2uvPPgHGBmN2Q7B+ecc8653Z0vmHbOOeecc86lxTsPzjnnnHPOubR458E555xzzjmXFu88OOecc84559LinQfnnHPOOedcWrzz4FwNV1JSQrt27Tj//PMB6NmzJ0cccQRt27albdu2FBQUZDlD55xzzu0u/FatztVww4YNo02bNqxdu3Zb2ZAhQ7jooouymJVzzjnndkfVeuRB0kBJt6TY3kXSMZVYX09Jj1RWvEyS1EHSX8LrXEmnZjuneJLuSGOf4kqu82JJ70raKqlDZcbeXaxcuZJp06Zx1VVXZTsV55xzzu0BavrIQxdgKvBethPJNjNbCCwMb3OBYuDNrCW0szuAP2a4zqXAL4En0j1gw+YSWvSbVnUZVYLlg8/b9rpv3748+OCDrFu3bod9+vfvz7333kunTp0YPHgw9erVy3SazjnnnNsNycyynUOlktQf+DWwAvgCyAfWAL2BusCHwP8BbYk6DmvCz4UhxKNAE2A9cLWZLUtSz8XA3UAJsMbMzpDUE/g5sA/QCnjRzG4L+3cnugAWMM3Mfh/Ki4kuTjsC3wDdzOyLJHVeneA86gCFQEsz2yppH6AIaBnO8a/At8AbwE/N7LgksXOBW4DrgfnhvL4AbgCWASOA5mH3vmY2V9JA4AigKXAUcDNwCvBT4BPgAjPbnKS+k4BhwL7ARqAT0WewU/tJGgzcCiwB3jWzHkliFptZjqQc4CVg/9A+d5rZS2Gfu4AeRH8fXwL5ZjY0Uby4uHnALaGDlWh7b6LPhcaNm7Qf8OdRqcJl3fHNGgIwb9485s+fz0033URBQQHjx49n0KBBfPXVVxxwwAFs3ryZhx56iEMOOYTLL788y1knVlxcTE5OTrbTqFG8zTPP2zyzvL0zz9s8s+Lbu2PHjvlmVq7ZFdVq5EFSe6Ab0I7o3BYRdR5eMLNRYZ/7gF5mNlzSFGCqmU0M22YBfczsA0knA48BZyWpbgBwjpl9IqlRXHnbUP9GoEjScKIL8QeA9kQdhBmSupjZZKKL50Vm9jtJA4g6JNcnqTPZeRQCZwKvARcA081ss6TRQG8zezNcgJfJzJZLGgEUxy6qJT0LPGxmb0hqDkwH2oRDWhF1fI4B5gEXhgv+F4HzgMml65BUFxgPXGpmCyTtB2xI1n5m1k/S9WbWNp1zAL4DuprZWkmNgfnhs25P1EEp/fdRIWY2EhgJ0Lzl9+2hJbv3P6vlPXIBmD59Ovn5+fTs2ZPvvvuOtWvX8uSTTzJ27Nht+9atW5ehQ4eSm5ubnWTLkJeXt9vmVl15m2eet3lmeXtnnrd5ZlW0vXfvq5zyO53o2+r1AOGCEeC4cLHdCMghuvjdQfi2+lRggqRYcaq5GnOBMZKeB16IK59lZmtCzPeAw4EDgbzYiIKkZ4AziC6stxJdSAOMLRWrtGTnMR64lKjz0A14LHRoGphZbOrRs8D5KWKn8hPgmLh22U9Sg/D6n6GjsgSoDbwSypcALZLEaw2sMrMFAGa2FiDET9R+K8qZr4A/SjqDqH2bAQcDpwEvmdmGEP/lcsYtU/06tSmKmxa0Oxs0aBCDBg0Cov9Ihg4dytixY1m1ahVNmzbFzJg8eTLHHZdwsMo555xzNVB16zwAJJqHNQboYmaFYWpRboJ9agGr0/1228z6hNGJ84ACSbHjNsbtVkLUxip9fKrQKbaNIfF5TAEGSTqA6Nv1V4H9ylFnWWoBP4pddMeEi/2NAGHK1GbbPg9uK8n/vkTy80zUfuXVg2jqWfvQsVkO7E35Pocaq0ePHnzxxReYGW3btmXEiBHZTsk555xzu4nqdrel2UBXSfXDN+MXhPIGwCpJdYguLGPWhW2xb78/DmsZUOSEZBVJamVmb5nZAKK584elyOst4ExJjSXVBroDr4dttYDYPTEvI1qbkEzC8zCzYuBtojUEU82sxMy+AdZJOiXs1i1F3NK2tUswg7ipVHEdpV21DDgkrHtAUgNJZXUSNofzTkdD4PPQcehINHoBUdteIGnvMNK0ZwwRZEBubi5Tp04F4NVXX2XJkiUsXbqUsWPH+jxU55xzzm1TrToPZraIaApPATAJmBM23UV0AT+T6MI1Zhxwq6R3JLUiuiDvFdYQvAv8IkV1QyQtkbSUqNNSmCKvVcDtRNOKConWOLwUNn8LHCspn2h9xb0p6kx2HoTz/hXbp0AB9AJGSppH9K37mhSx471M1AkrkHQ68Fugg6TFYSpRnzTjJGRmm4imWcXWa8wkGhlIZSSwOEz5KsszId+FRJ/pslDvAqJRmkKi6WELSdEmkrpKWgn8CJgmaafpbs4555xzNUm1u9vSniZ2h6Aqip0TRiWQ1A9oamY3VkVde4r/z96dx1dV3fv/f70ZFGwYRLQP1FqUUooIIkHjgBhqrQNYQVBwuBecuPTicLUq0ApYq0i1/IQiVqFWrMWhOCAOV0UwDiiDQAKIorbgRS6/K1pFooghfL5/rHXkGM45SSQ5h4TP8/HgkZO1117D54THY6+91to7EZP4VKpXCBvKl9ZU+R06dLDVq1fXVHGuEr7JLvs85tnnMc8uj3f2ecyzKznekvbspy25nfSWNIrwPX8ADMltc3YLU+OLAZsA99fkwME555xzrr7zwUMl4nsjzqmQPNPMbqmJ8lPNOkiaApxQIXmSmd1XzbIf4dvLmJB0KuGxscnWmFm/6pRdVfGRrYdWSB5hZt9pCZCk/YC5KQ6dbGafVHa+mZ2foswaibdzzjnnXH3ng4dKxEFCjQwUqlHn8Fos+3lSPKq2Fuur0UFJHCDs6obtimXWWrydc8455+qTerVh2jnnnHPOOVd7fPDgnHPOOeecqxIfPDhXz3311Vccc8wxHHnkkXTq1ImxY8cCMHfuXLp160bXrl3p0aMH77//fo5b6pxzzrndnQ8enKvn9t57b+bNm0dJSQnFxcU899xzLFiwgF/+8pfMmDGD4uJizj//fG6++eZcN9U555xzu7mcDx4k3Sjp2gzH+8ZHa9ZUfUMk3VlT5dV1kkprocy28eV5NVVeoaTjK8mT8e/oO9Z7iKQXJL0taZWktjVZfrZI+uYt0WVlZZSVlSEJSXz++ecAbNq0iQMPPDCXzXTOOedcHVAXnrbUF3gaWJXrhricKQRKgdezXO9fgVvMbI6kPGB7ZSdsKSun7chnar9lVbB2fO9vPpeXl5Ofn8/777/P8OHDKSgo4M9//jNnnHEGTZs2pXnz5ixYsCCHrXXOOedcXZCTmQdJv5G0WtKLQIeYdpmkxZJKJD0maZ94t/kXwO2SiiW1i/+ek7RE0quSfpKhnnMkrYxlvpJ06MBYxnuSbkvKf56kFfGc3yell0qaIGmppLmS9s9QZ6p+tJC0VlKDmGcfSeskNZZ0tKTlkt6QdHumO/aSnpXUJX5eJmlM/Pw7SZfGz9fF+pdL+m3SuRdKWhTjeI+khhXKbh3b0DtdOXFG4W1J0yS9Fe/KN43H8mOf3wAyPvpUUkNJf4ixXi7pipi+VtJvY5xXSPpJvNs/DLg6tv3ETGWn+w5iejtJC+KxmzLNusTZrkZmNgfAzErN7MvK6t5dNWzYkOLiYj788EMWLVrEypUrueOOO3j22Wf58MMPueiii7jmmmty3UznnHPO7eayPvMgKR8YBBwV618KLAEeN7NpMc/NwCVmNlnSbOBpM3s0HpsLDDOz9yQVAHcBP01T3RjgVDNbL6llUnrXWP9WYLWkyUA54eVp+cCnwAuS+prZLOB7wFIz+1W8YB8LXJ6mznT9KAFOAl4CzgSeN7MySfcBQ83sdUnjKwnfK8CJktYC29jxYrMewN8k/RxoDxwDCJgtqSewERgInBDrvAu4gHBnHUnfB2YDN8S77OnK+Z+Yfp6ZXSbp70B/4G/AfcAVZvaypNsr6cdQwovjjjKzbZJaJR372My6SfpP4Fozu1TS3UCpmf2hknITdvoOgMnAJMLL3x6SNKySMn4MfCbp8djWF4GRZlZeMaOkobFPtG69P2M6b6tiM2tXUVFRyvS2bdty5513snDhQrZs2UJRURGHHHIIU6ZMSXvO7qq0tLTOtbmu85hnn8c8uzze2ecxz65djXculi2dCDyRuIsbBwcAR8QLvZZAHileZKawdOR4YKakRPLeGeqaD0yPF7mPJ6XPNbNNscxVwA+B/YAiM9sY02cAPYFZhOUqiTc1/61CWRWl68cjhAv4lwiDp7vigKaZmSWW4zwI9MlQ9qvAlcAa4BnglHhXva2ZrZZ0GfBzYFnMn0e42O9CGBQtjnFrCnwU8zQmvLF5uJm9HNN+nqac/yG8jbo4pi8B2kpqAbRMOv8B4PQM/fgZcLeZbQMws38lHUvEdglwdoYyMkn3HRxHWAYHIdaZBiONCH+rRxH6/QgwBLi3YkYzmwpMBejQoYNdccFZ37HZtWPjxo00btyYli1bsmXLFkaPHs2IESN49NFHOfDAA/nxj3/MvffeS35+PoWFhblubrUUFRXVuTbXdR7z7POYZ5fHO/s85tm1q/HO1Z4HS5E2HehrZiWShhDWuVfUAPjMzKr0hmEzGxZnJ3oDxZIS521NylZOiIMqnp+p6AzHppO6H7OBW+Nd9nxgHtC8GnUCLAa6A/8E5gCtgcsIF9oQ+nCrmd2TfFJcFnS/mY1KUea2eP6pQOLiP105bdk5dk1j/kwxqShT/kT5ie/lu5hO5X9LlfkQWGZm/wSQNAs4lhSDh93dhg0bGDx4MOXl5Wzfvp1zzz2XPn36MG3aNPr370+DBg3Yd999+ctf/pLrpjrnnHNuN5eLPQ+vAP0kNZXUjLCEB6AZsEFSY8KSmoTN8Rhm9jmwRtI5AAqOTFeRpHZmttDMxgAfAz/I0K6FwElx7X9D4Dx2XEw3AAbEz+cDr2UoJ2U/zKwUWERYOvO0mZWb2afAZknHxmyDMpSLmX0NrAPOBRYQZiKujT8h3GG/OM7QIOkgSQcQZhYGxM9IaiXph4ligYuBn0gaWUk56dr1GbBJUo+YdEG6vNELwDBJjRLtqST/N38DVZTub2kBYZkVVBJrwkBtX+3Y3/JT6uim/S5durBs2TKWL1/OypUrGTNmDAD9+vVjxYoVlJSUUFRUxGGHHZbjljrnnHNud5f1wYOZLSUsASkGHmPHhe9owgX8HOCdpFMeBq5T2CDcjnAxeEncQ/AWkGmNyO1x4+1KwqClJEO7NgCjCMuKSgh7HJ6Mh78AOklaQriIvClDnen6Qez3hexYAgVhPf7UuNFYwKYMZUOI1//FZV+vAgfHn5jZC4TlOG9IWgE8SlgWtQq4gbCPY3lsW5ukvpcTLqZ7SfrPdOVU0q6LgCmxH1sqyftnwlKg5fF7PL+S/E8RBpxV2jBN+u/gv4BrJC0i9D9trGNMrgXmxhgImFaFup1zzjnn6i2ZVWe1yZ5JUqmZ5dVS2XlxVoJ457+NmV1VG3Xt6eL+kC1mZpIGETZ+1+gGhQ4dOtjq1atrskiXga+TzT6PefZ5zLPL4519HvPsSo63pCVm1r0659eF9zzUd70ljSJ8Fx8QNuW62pEP3Kmwa/wzwnIt55xzzjlXRfVi8CDpN8A5FZJnmtktNVF+qlkHSVPY8ajUhElmdl81y36Eby9jQtKphMfGJltjZv2qU3au1UY/duW7NrNXgW/tkZHUmfB0qGRbzazgu7bROeecc66+qheDh3jhWCMDhWrUmfFFaLtY9vOkeFRtXVMb/ajp79rMVhDe++Gcc8455yqRkzdMO+ecc8455+oeHzw455xzzjnnqsQHD84555xzzrkqqRd7HpxzqX311Vf07NmTrVu3sm3bNgYMGMBvf/tbTjzxRDZv3gzARx99xDHHHMOsWbNy3FrnnHPO7e588OBcPbb33nszb9488vLyKCsro0ePHpx++um8+uqr3+Tp378/Z51Vo6+7cM4551w9Va+XLUm6UdK1GY73lXR4DdY3RNKdNVVeNknqLumP8XOhpONz3aZkkn5dhTylNVzn7ZLekbRc0hOSWtZk+dkgiby88KThsrIyysrKCK+5CDZv3sy8efPo27dvrpronHPOuTpkT5956As8DazKdUNyzczeBN6MvxYCpcDrOWvQzn4NjMtynXOAUWa2TdLvgVHAiEwnbCkrp+3IZ7LSuEzWju/9zefy8nLy8/N5//33GT58OAUFO15h8cQTT3DyySfTvHnzXDTTOeecc3WMzCzXbahR8SVi/w6sAzYCS4BNwFBgL+B94N8Iz/Z/Oh7bBPSPRUwB9ge+BC4zs3fS1HMOMBYoBzaZWU9JQ4BfAPsA7YAnzOz6mP88wgWwgGfMbERMLwXuAXoBnwKDzGxjmjovS9GPxkAJcJiZbZe0D7AaOCz28V7gC+A14HQzOyJN2YXAtcDlwILYr43AFcA7wN3AITH7f5nZfEk3AocCbYAfA9cAxwKnA+uBM82sLE19RwOTgO8BW4GTCd/BTvGTNB64DlgBvGVmF6Qps9TM8iTlAU8C+8b43GBmT8Y8o4ELCH8fHwNLzOwPqcqrUHY/YECquiUNJXwvtG69f/6YidMqK67WdT6oxU5ppaWljB49miuvvJJDDz0UgBEjRnDGGWdw0kknZbuJNaK0tPSbmRWXHR7z7POYZ5fHO/s85tmVHO9evXotMbPu1Tm/Xs08SMoHBgFHEfq2lDB4eNzMpsU8NwOXmNlkSbOBp83s0XhsLjDMzN6TVADcBfw0TXVjgFPNbH2F5SxdY/1bgdWSJhMuxH8P5BMGCC9I6mtmswgXz0vN7FeSxhAGJJenqTNdP0qAk4CXgDOB582sTNJ9wFAzez1egFfKzNZKuhsoTVxUS3oQuMPMXpN0COHFbx3jKe0IA5/DgTeA/vGC/wmgN7DTLlxJexHeqj3QzBZLag5sSRc/Mxsp6XIzq+rL3L4C+pnZ55JaAwvid51PGKBU/Puoioup8CbwBDObCkwFOOSwH9mEFbn/b7X2gsKU6UuWLOGTTz7hoosu4pNPPuH9999nxIgRNGnSJLsNrCFFRUUUFhbmuhl7FI959nnMs8vjnX0e8+za1Xjn/iqnZp1IuFv9JUC8YAQ4Il5stwTySPHW43i3+nhgZtKa8L0z1DUfmC7p78DjSelzzWxTLHMV8ENgP6AoMaMgaQbQk3BhvZ0dF6V/q1BWRen68QgwkDB4GATcFQc0zcwssfToQaBPhrIz+RlweFJcmktqFj//dxyorAAaAs/F9BVA2zTldQA2mNliADP7HEisxU8Vv3XVbK+AcZJ6EuJ7EPB9oAfwpJltieU/VaXCwmzWNmBGZXmbNm7I6qQlQ7m2ceNGGjduTMuWLdmyZQsvvvgiI0aElVczZ86kT58+dXbg4Jxzzrnsq2+DB4BU67CmA33NrCQuLSpMkacB8FlV726b2bA4O9EbKJaUOG9rUrZyQoxV8fxMRWc4Np3U/ZgN3CqpFeHu+jygJhexNwCOS1x0J8SL/a0AcclUme1YB7ed9H9fIn0/U8Wvui4gLD3LjwObtUATqvc9ACBpMGHQdXJS3+qMDRs2MHjwYMrLy9m+fTvnnnsuffqEMeTDDz/MyJEjc9xC55xzztUl9e1pS68A/SQ1jXfGz4zpzYANkhoTLiwTNsdjibvfa+JeBhQcma4iSe3MbKGZjSGsnf9BhnYtBE6S1FpSQ+A84OV4rAEwIH4+n7A3IZ2U/TCzUmARYQ/B02ZWbmafApslHRuzDcpQbkXfxCV6gaSlVEkDpe/qHeDAuO8BSc0kVTZIKIv9rooWwEdx4NCLMHsBIbZnSmoSZ5oyThFIOo2wQfoXidmsuqZLly4sW7aM5cuXs3LlSsaMGfPNsaKiIk477bQcts4555xzdU29GjyY2VLCEp5i4DEg8TD70YQL+DmEC9eEh4HrJC2T1I5wQX5J3EPwFpDp4fe3S1ohaSVh0FKSoV0bCE/qeSnmW5rYwEvYzNxJ0hLC/oqbMtSZrh/Efl/It9flXwJMlfQG4a77pgxlJ3uKMAgrlnQicCXQPT6ydBUwrIrlpGRmXxOWWSX2a8whzAxkMhVYHpd8VWZGbO+bhO/0nVjvYsIsTQlhedibZI7JnYRB1JwYi7urULdzzjnnXL1V7562VNcknhBUS2XnxVkJJI0E2pjZVbVRV12RiEl8KtUrhA3lS2uq/A4dOtjq1atrqjhXCd9kl30e8+zzmGeXxzv7PObZlRxvSXv205bcTnpLGkX4nj8AhuS2ObuFqfHFgE2A+2ty4OCcc845V9/54KES8Uk751RInmlmt9RE+almHSRNAU6okDzJzO6rZtmPUOHxopJOJTw2NtkaM+tXnbKrKj6y9dAKySPMbKcnXlWxvP2AuSkOnWxmn1R2vpmdn6LMGom3c84551x954OHSsRBQo0MFKpR5/BaLPt5Ujyqthbrq9FBSRwg7OqG7Ypl1lq8nXPOOefqk3q1Ydo555xzzjlXe3zw4JxzzjnnnKsSHzw4V8d99dVXHHPMMRx55JF06tSJsWPHArBmzRoKCgpo3749AwcO5Ouvv85xS51zzjlX1/ngwbk6bu+992bevHmUlJRQXFzMc889x4IFCxgxYgRXX3017733Hvvuuy/33ntvrpvqnHPOuTrOBw8uKyS1lPSfuW5HZSStldQ61+2oDknk5YWHdpWVlVFWVoYk5s2bx4AB4eXlgwcPZtasWblspnPOOefqAX/aksuWlsB/AnfluiG1aUtZOW1HPpO1+taO7w1AeXk5+fn5vP/++wwfPpx27drRsmVLGjUK/8UPPvhg1q9fn7V2Oeecc65+8pkHly3jgXaSiiXNlHRW4oCkGZJ+IWmIpCclPSdptaSxSdomRpwAACAASURBVHkulLQonn+PpIbpKpJ0mqSlkkokzY1prSTNkrRc0gJJXWL6fpJekLRM0j2AvkududawYUOKi4v58MMPWbRoEW+//fZOeSSlONM555xzrup85sFly0jgCDPrKukk4GrgSUktgOOBwcCFwDHAEcCXwGJJzwBfAAOBE8ysTNJdwAXAXytWIml/YBrQ08zWSGoVD/0WWGZmfSX9NJ7bFRgLvGZmN0nqDQyN5XSsRp1DE+e1br0/Yzpv2+VgVVVRUdFOaW3btmXGjBls3LiRuXPn0rBhQ9566y2aNGmSMn9dVlpaWu/6tLvzmGefxzy7PN7Z5zHPrl2Ntw8eXNaZ2cuSpkg6ADgbeMzMtsU743MSb4qW9DjQA9gG5BMGEwBNgY/SFH8s8IqZrYl1/Sum9wD6x7R5ccahBdAztgEze0bSpzH/yVWt08ymAlMBOnToYFdccFaqbLVm48aNNG7cmJYtW7JlyxZGjx7NiBEj+OSTT9i4cSODBg3i4Ycf5qKLLqKwsDCrbattRUVF9a5PuzuPefZ5zLPL4519HvPs2tV4++DB5coDhDv5g4CLk9KtQj4jLCW638xGVaFcpSgjkV6RVfhZMX9V68ypDRs2MHjwYMrLy9m+fTvnnnsuffr04fDDD2fQoEHccMMNHHXUUVxyySW5bqpzzjnn6jgfPLhs2Qw0S/p9OrAI+P/N7K2k9FPiUqMtQF/CwOJLwhKnO8zso3i8mZl9kKKeN4Apkg5NLFuKsw+vEAYrv5NUCHxsZp9LSqTfLOl0YN9Yztxq1JlTXbp0YdmyZTulH3bYYSxatCgHLXLOOedcfeWDB5cVZvaJpPmSVgL/bWbXSXobqPj80NcIsxI/Ah40szcBJN0AvCCpAVAGDAd2upA3s41xD8LjMe9HwCnAjcB9kpYTBiOD4ym/BR6StBR4GfifWM6qqtbpnHPOOben8MGDyxozOz/xWdI+QHvgoQrZPjKzy1Oc+wjwSBXr+W/gvyuk/QvYaTNC3F/x86Skq79Lnc4555xzewJ/VKvLOkk/A94BJpvZply3xznnnHPOVY3PPLisM7MXgUNSpE8n7IWoEkkLgb0rJP+bma3YlfY555xzzrnUfPDg6iwzK8h1G5xzzjnn9iS+bMk555xzzjlXJT54cM4555xzzlWJDx6cc84555xzVeKDB+fquK+++opjjjmGI488kk6dOjF27FgA1qxZQ0FBAe3bt2fgwIF8/fXXOW6pc8455+o6Hzw4V8ftvffezJs3j5KSEoqLi3nuuedYsGABI0aM4Oqrr+a9995j33335d577811U51zzjlXx/ngoY6Q9Hr82VbS+ZXlr4X6h0i6sxbLny5pwHc4r1DS8TXYjrbxLdh1hiTy8vIAKCsro6ysDEnMmzePAQNCSAcPHsysWRVf5u2cc845Vz3+qNY6wswSF8htgfOBB3PXmt1KIVAKvJ7jdgCwpayctiOfyVp9a8f3BqC8vJz8/Hzef/99hg8fTrt27WjZsiWNGoX/4gcffDDr16/PWrucc845Vz/54KGOkFRqZnnAeKCjpGLgfuCPMa2Q8MK0KWZ2j6RC4LfA/wFdgceBFcBVQFOgr5n9I01d5wBjgXJgk5n1jIcOlPQc0A54wsyuj/nPA34NCHjGzEYk2gzcA/QCPgUGmdnGKvR1DHBmbOfrwH+YmUm6EhgGbANWASPj7+WSLgSuMLNXq9IfSW2BB4DvxWyXm9nrFc5rSIrYpih/KDAUoHXr/RnTeVtlXawxRUVF33yeOHEipaWljB49moMOOogtW7Z8c/yjjz7iyy+//Fb++qC0tLTe9Wl35zHPPo95dnm8s89jnl27Gm8fPNQ9I4FrzawPfHPhusnMjpa0NzBf0gsx75FAR+BfwD+BP5vZMZKuAq4A/itNHWOAU81svaSWSeldgaOArcBqSZMJF+S/B/IJA4QXJPU1s1mEC/OlZvarOCAYC1xehT7eaWY3xf49APQBnop9P9TMtkpqaWafSbobKDWzP2QoL1V/PgJOMbOvJLUHHgK6VzjvElLE1szWJGcys6nAVIBDDvuRTViRvf9Way8o3CltyZIlbN26la1bt9KjRw8aNWrEG2+8Qfv27Sks3Dl/XVZUVFTv+rS785hnn8c8uzze2ecxz65djbcPHuq+nwNdkvYLtADaA18Di81sA4CkfwCJQcUKwmxAOvOB6ZL+TpixSJhrZptieauAHwL7AUWJGQVJM4CewCxgO/BIPPdvFcrKpJek64F9gFbAW4TBw3JghqRZsfyqStWfxsCdkroSBkA/TnFeutiuSZEXgKaNG7I6LiXKlo0bN9K4cWNatmzJli1bePHFFxkxYgS9evXi0UcfZdCgQdx///2cddZZWW2Xc8455+ofHzzUfSIs13n+W4lh2dLWpKTtSb9vJ8N3b2bDJBUAvYHieIFNhfLKYxmqRlutsgySmgB3Ad3NbJ2kG4Em8XBvwsDkF8BoSZ2qVGnq/lxBWNJ1JOHBAV+lag4pYru72bBhA4MHD6a8vJzt27dz7rnn0qdPHw4//HAGDRrEDTfcwFFHHcUll1yS66Y655xzro7zwUPdsxlolvT788AvJc0zszJJPwZ2aWespHZmthBYKOlM4AcZsi8EJklqTVi2dB4wOR5rAAwAHiZs8n6tCtUnBgofS8qL5z8qqQHwAzN7SdJrsbw8Qjyaf4f+tAA+NLPtkgYDDVOcmjK2ZvZFFfqRNV26dGHZsmU7pR922GEsWrQoBy1yzjnnXH3lg4e6ZzmwTVIJMB2YRHgC01JJAjYCfXexjtvjPgABc4ESwn6HnZjZBkmjgJdi/mfN7Ml4+Augk6QlwCZgYGUVx30M0whLq9YCi+OhhsDfJLWI9dwR8z5FGFycRZoN02n6cxfwWNxM/VJsa0V/puZj65xzzjlXZ/ngoY6IT1rCzMqAkysc/nX8l6wo/kucX5j0+VvHUtR1dork6fFfIk+fpM8PkubRsWY2Ghidrq6kfEOSPt8A3JAiW48U570LdKmk7FT9ea/CeaNi3rXAEfHzdlLH1jnnnHNuj+QviXPOOeecc85Vic887MEk/QY4p0LyTDO7pSbKT8yWVKhzCnBCheRJZnbfrtZX2/1xzjnnnNvT+eBhDxYvqrN6YW1mw2ux7Kz3xznnnHNuT+LLlpxzzjnnnHNV4oMH55xzzjnnXJX44MG5OmzdunX06tWLjh070qlTJyZNmgRASUkJxx13HJ07d+bMM8/k888/z3FLnXPOOVcf+ODBuTqsUaNGTJgwgbfffpsFCxYwZcoUVq1axaWXXsr48eNZsWIF/fr14/bbb891U51zzjlXD+wWgwdJN0q6NsPxvpIOr8H6hki6s6bKq+sklVYhz3RJA7LRnjT1V/quhar0o5p1/k7ScknFkl6QdGBNll8T2rRpQ7du3QBo1qwZHTt2ZP369axevZqePXsCcMopp/DYY4/lspnOOeecqyfqytOW+gJPA6ty3RCXM78GxmW5ztvjS+6QdCUwBhiW6YQtZeW0HflMNtrG2vG9v/372rUsW7aMgoICjjjiCGbPns1ZZ53FzJkzWbduXVba5Jxzzrn6LWczD5J+I2m1pBeBDjHtMkmLJZVIekzSPpKOB34B3B7vALeL/56TtETSq5J+kqGecyStjGW+knTowFjGe5JuS8p/nqQV8ZzfJ6WXSpogaamkuZL2z1Bnqn60kLRWUoOYZx9J6yQ1lnR0vMP9hqTbJa3MUPazkrrEz8skjYmffyfp0vj5ulj/ckm/TTr3QkmLYhzvkdSwQtmtYxt6K7hT0ipJzwAHJOUbE8tfKWlqzNtO0tKkPO0lLcnQj6MlvR5jtEhSszgj9HjF70XSeKBpbPeMdGUmlZ0Xv6Ol8bs8K+nYaEnvSJoj6aFMM15mlrxR4HuAVVZ3rpSWltK/f38mTpxI8+bN+ctf/sKUKVPIz89n8+bN7LXXXrluonPOOefqAZll/3pIUj4wHSggzH4sBe4G7jOzT2Kem4H/M7PJkqYDT5vZo/HYXGCYmb0nqQC41cx+mqauFcBpZrZeUksz+0zSEMJd5KOArcBqoAdQDiwA8oFPgReAP5rZLEkGXGhmM+IF+wFmdnmaOvdL048ngYlm9pKkgcApZnZpHCwMNbPX44VyHzM7Ik3ZI4HNwAPAXOBfZnaqpJcId8V/CAwA/gMQMBu4DdgYf55tZmWS7gIWmNlfFZb7tIt5bzCzOZLOBn4JnAZ8nzDrc6mZPSqplZn9K7bnAeDvZvZUbMPVZlYsaRywwcwmp+jDXsA7wEAzWyypOfAlcGGq78XM1kkqTfXSuQrllppZnqRGwD5m9rmk1vE7bU/4Xv8MHMeOv7t7zOwPGcq8Bfh3YBPQy8w2psgzFBgK0Lr1/vljJk7L1Mwa0/mgFgBs27aNUaNGcfTRR3PuuefulG/dunWMGzeOP/3pT1lpVzaVlpaSl5fxz8LVMI959nnMs8vjnX0e8+xKjnevXr2WmFn36pyfq2VLJwJPmNmXAJJmx/Qj4sV2SyAPeL7iiZLygOOBmZISyXtnqGs+MF3S34HHk9LnmtmmWOYqwkX3fkBR4gIx3uXuCcwCtgOPxHP/VqGsitL14xFgIPASMAi4S1JLoJmZvR7zPAj0yVD2q8CVwBrgGeAUSfsAbc1staTLgJ8Dy2L+PMKFcxfCxfPiGLemwEcxT2PCQGS4mb0c03oCD5lZOfC/kuYltaGXpOuBfYBWwFvAU4QL84skXRP7eUyaPnQgDCwWw447/LFdqb6X6q65ETBOUk/C93YQYQDUA3jSzLbE8p+qrCAz+w3wG0mjgMuBsSnyTAWmAhxy2I9swors/Ldae0EhZsbgwYM54YQTmDhx4jfHPvroIw444AC2b9/OkCFDuO666ygsLMxKu7KpqKioXvZrd+Yxzz6PeXZ5vLPPY55duxrvXO55SDXlMR3oa2YlcXagMEWeBsBnZta1SpWYDYuzE72BYkmJ87YmZSsnxEIVz89UdIZj00ndj9nArZJaES7k5wHNq1EnwGKgO/BPYA7QGrgMSCwREmEm5p7kkyRdAdxvZqNSlLktnn8q8HJS+k59lNQEuAvoHmcEbgSaxMOPES6u5wFLErMvKShV2VGq76W6LgD2B/LjLMva2MbqfL8VPUgYrO00eEjWtHFDVlfYi1Cb5s+fzwMPPEDnzp3p2jX8aY8bN4733nuPKVOmAHD22Wdz0UUXZa1NzjnnnKu/crXn4RWgn6SmkpoBZ8b0ZsAGSY0JF4AJm+OxxF3qNZLOAYjr7Y9MV5Gkdma20MzGAB8DP8jQroXASXHtf0PgPHZcTDcgLAcCOB94LUM5KfthZqXAImASYRlWuZl9CmyWdGzMNihDuZjZ14Q78ecSluO8Clwbf0KY5bg4ztAg6SBJBxBmFgbEz0hqJemHiWKBi4GfxGVREL6jQZIaSmoD9IrpiYHCx7GOb57AZGZfxfr/BNyXoRvvEPacHB3b0iwuNcqkLMazKloAH8WBQy/C7AWE7+xMSU1i2zNe5Utqn/TrL2K7dys9evTAzFi+fDnFxcUUFxdzxhlncNVVV/Huu+/y7rvvMn78+MSsjnPOOefcLsnJzIOZLZX0CFAMfMCOC9/RhAv4D4AVxAED8DAwTeGJNwMIF+R/knQDYcnNw0BJmupujxeBIlxAlwApZy3MbENcnvJSzP+smT0ZD38BdIqbgDcRluWkk64fEJYuzeTbsyqXxP59ARTF8jN5FTjZzL6U9CpwcEzDzF6Q1BF4I14wlhL2aqyK8XpBYdN2GTA8thEzK5c0CHhK0ueEAcBPY/vfJQ6i4p6RaTF9LWEmJNkM4GzCfpGUzOzruOdjsqSmwBbgZ5X0eSqwXNJSM7ugkrwzYj/eJPyNvRPrXRyXyJXEfr9J5liPl9SBsPTpAyp50pJzzjnnXH2Xkw3TdVFVNuzuQtl5cVYisSG6jZldVRt11bb49KIWiUec7m4SsY77RF4hbFRfWtl5VdWhQwdbvXp1TRXnKuHrZLPPY559HvPs8nhnn8c8u5LjLanObJh239Y7zng0ItzhHpLb5nw3kp4gPLUp5ZOvdhNTFV442ISwB6TGBg7OOeecc/VdvRk8SPoNcE6F5JlmdktNlJ9q1kHSFOCECsmTzCzTev9UZT/Cjic5Jco+Ffh9haxrzKxfdcrOplRtiwOKQyskjzCznZ6kVRWS9iMsP6vo5AwbtJPbeH6KMmvke3TOOeecq+/qzeAhDhJqZKBQjTqH12LZz5PiUbV1TU0PduIAoUpP2qpGmbX2PTrnnHPO1Sc5e8O0c84555xzrm7xwYNzzjnnnHOuSnzw4JxzzjnnnKsSHzw4V0etW7eOXr160bFjRzp16sSkSZMAKC4u5thjj6Vr1650796dRYsW5bilzjnnnKsv6s2Gaef2NI0aNWLChAl069aNzZs3k5+fzymnnML111/P2LFjOf3003n22We5/vrrKSoqynVznXPOOVcP7BYzD5JujC8XS3e8b3w2f03VN0TSnTVVXl0nqbQKeaZLGpCN9qSp/9dVyFNpP75DvVdIWi3pLUm31XT5u6JNmzZ069YNgGbNmtGxY0fWr1+PJD7//HMANm3axIEHHpjLZjrnnHOuHqkrMw99gaeBVbluiMuZXwPjslmhpF7AWUAXM9sq6YDKztlSVk7bkc/UetvWju/97d/XrmXZsmUUFBQwceJETj31VK699lq2b9/O66+/Xuvtcc4559yeQWaWm4rDS93+HVgHbASWAJuAocBewPvAvxGe6f90PLYJ6B+LmALsD3wJXGZm76Sp5xxgLFAObDKznpKGAL8A9iG8EfkJM7s+5j+PcKEq4BkzGxHTS4F7gF7Ap8AgM9uYps7LUvSjMVACHGZm2yXtA6wGDot9vBf4AngNON3MjkhT9rPASDNbLmlZbPtNkn4HfGBmf5Z0HXAusHc8PjaeeyFwZWzXQuA/zaxcUqmZ5UlqDTwF3Aw8C0wmvC16TYzHX8zsUUljgDOBpsDrwH/Efsw0s26xrvbAw2aWn6YfRwOTgO8BW4GTCd/tTt+LpPHAdcAK4C0zuyBNmYl+5AFPAvvGuN9gZk/GPKOBCwh/dx8DS8zsD2nK+zsw1cxeTHU8Kd9QwvdN69b754+ZOC1T9hrR+aAW33zesmULV111FRdeeCE9e/bkj3/8I0ceeSQnnXQSL730Ek8//TQTJkyo9TblQmlpKXl5O72/0dUij3n2ecyzy+OdfR7z7EqOd69evZaYWffqnJ+TwYOkfGA6UECY/VgK3A3cl3hLsKSbgf8zs8mSpgNPm9mj8dhcYJiZvSepALjVzH6apq4VwGlmtl5SSzP7LA4exgBHES5cVwM9CAOMBUA+YYDwAvBHM5slyYALzWxGvHg+wMwuT1Pnfmn68SQw0cxekjQQOMXMLpW0EhhqZq/HC+U+GQYPI4HNwAOENy3/y8xOlfQSMAz4ITCAcEEvYDZwG2GAdhtwtpmVSboLWGBmf40Do3Yx7w1mNkfS2cAvgdOA7xNmfS6Ng4dWZvav2J4HgL+b2VOxDVebWbGkccAGM5ucog97Ae8AA81ssaTmhEHgham+FzNblxgYpIpJUrmJwUMjYB8z+zwOiBYA7Qnf65+B49jxd3dPhsFDMWEQchrwFXCtmS3O1IZDDvuRNTh3UqYsNSIx81BWVkafPn049dRTueaaawBo0aIFn332GZIwM1q0aPHNMqb6pqioiMLCwlw3Y4/iMc8+j3l2ebyzz2OeXcnxllTtwUOuli2dSLir/CWApNkx/Yh4sd0SyCPFG5bjXeXjgZmSEsl7Z6hrPjA93kV+PCl9rpltimWuIlx07wcUJWYUJM0AegKzgO3AI/Hcv1Uoq6J0/XgEGAi8BAwC7pLUEmhmZom1JQ8CfTKU/Sph9mAN8AxwSpzFaGtmq+Osx8+BZTF/HuHCuQvh4nlxjFtT4KOYpzFhIDLczF6OaT2Bh8ysHPhfSfOS2tBL0vWEGYJWwFuEGYs/AxdJuib285g0fehAGFgsBjCzzwFiu1J9L+syxCMVAeMk9SR8bwcRBkA9gCfNbEss/6lKymlEmL04Fjga+LukwyzDiLtp44asrrCkqLaYGZdccgkdO3b8ZuAAcOCBB/Lyyy9TWFjIvHnzaN++fVba45xzzrn6L5d7HlJdgE0H+ppZSZwdKEyRpwHwmZl1rVIlZsPi7ERvoFhS4rytSdnKCbFQxfMzFZ3h2HRS92M2cKukVoQL+XlA82rUCbAY6A78E5gDtAYuIyz7gtCHW83snuSTJF0B3G9mo1KUuS2efyrwclL6Tn2U1AS4C+geZwRuBJrEw48RlojNIywH+iRNH5Sq7CjV91JdFxCWtOXHWZa1sY3V+X4BPgQej4OFRZK2E+Kdcrlats2fP58HHniAzp0707Vr+LMeN24c06ZN46qrrmLbtm00adKEqVOn5rilzjnnnKsvcvW0pVeAfpKaSmpGWD8P0AzYIKkx4QIwYXM8lrhLvSbuZUDBkekqktTOzBaa2RjCGvcfZGjXQuAkSa0lNQTOY8fFdAPCciCA8wl7E9JJ2Q8zKwUWEdb6P21m5Wb2KbBZ0rEx26AM5WJmXxPuxJ9LWI7zKnBt/AlhluPiOEODpIPiRt+5wIDEpl9JrST9MFEscDHwk7gsCsJ3NEhSQ0ltCHs9YMdA4eNYxzdPYDKzr2L9fwLuy9CNd4AD474HJDWLS40yKYvxrIoWwEdx4NCLMHsB4Ts7U1KT2PbKpghmEfZ8IOnHhL0iH1exDbWuR48emBnLly+nuLiY4uJizjjjDHr06MGSJUsoKSlh4cKF5Oen3HbinHPOOVdtOZl5MLOlkh4BioEP2HHhO5pwAf8BYXNss5j+MDBN0pWEi9ULgD9JuoGw5OZhwmbkVG6Pm3dFuIAuIWxQTtWuDZJGEZYVCXg2sdGWsJm5k6TExu6BGbqYrh8Qli7N5NuzKpfE/n0BFMXyM3kVONnMvpT0KnBwTMPMXpDUEXgjLgMqJezVWBXj9YKkBkAZMDy2kbhxehDwlKTPCQOAn8b2v0scRMU9I9Ni+lrCTEiyGcDZhP0iKZnZ13HPx2RJTYEtwM8q6fNUYLmkpek2TFdow1OS3iT8jb0T610cl8iVxH6/SeZY/wX4S9yT8jUwONOSJeecc865+i5nT1uqa6qyYXcXys6LsxKJDdFtzOyq2qirtim8r6OFmY3OdVtSScQ67hN5hbBRfWlNld+hQwdbvXp1TRXnKuGb7LLPY559HvPs8nhnn8c8u+rqhmn3bb3jjEcjwh3xIbltzncj6QnCU5tSPvlqNzFV4YWDTQh7QGps4OCcc845V9/Vm8GDwnsjzqmQPNPMbqmJ8lPNOkiaApxQIXmSmWVa75+q7EfY8SSnRNmnAr+vkHWNmfWrTtnZlKptcUBxaIXkEWa205O0qkLSfoTlZxWdnGGDdnIbz09RZo18j84555xz9V29GTzEQUKNDBSqUefwWiz7eVI8qrauqenBThwgVOlJW9Uos9a+R+ecc865+iRXT1tyzjnnnHPO1TE+eHDOOeecc85ViQ8enKtj1q1bR69evejYsSOdOnVi0qRJANx4440cdNBBdO3ala5du/Lss8/muKXOOeecq2/qzZ4H5/YUjRo1YsKECXTr1o3NmzeTn5/PKaecAsDVV1/Ntddem+MWOuecc66+qvMzD5JujO8WSHe8b3w0Z03VN0TSnTVVXjZJ6i7pj/FzoaTjc92mZJJ+XYU8pTVc5zmS3pK0XVL3pPRTJC2RtCL+3G0eP9umTRu6desGQLNmzejYsSPr16/Pcaucc845tyfYE2Ye+gJPA6ty3ZBcM7M3CW9VhvCG61Lg9Zw1aGe/BsZluc6VhDdi31Mh/WPgTDP7X0lHEJ58dVBlhW0pK6ftyGdqvpXA2vG9d05bu5Zly5ZRUFDA/PnzufPOO/nrX/9K9+7dmTBhAvvuu2+ttMU555xze6Y6OfMg6TeSVkt6EegQ0y6TtFhSiaTHJO0T76z/ArhdUrGkdvHfc/Fu8quSfpKhnnMkrYxlvpJ06MBYxnuSbkvKf168U71S0u+T0kslTZC0VNJcSftnqDNVP1pIWiupQcyzj6R1khpLOlrScklvSLpd0soMZRdKelpSW2AYcHWMy4mS9o/1LY7/Tojn3CjpfkkvxDacLem22M/nJDXOUN/Rkl6PfVkkqVmcuXm8YvwkjQeaxvbMSFdmUtl5MZZLY1vOSjo2WtI7kuZIeijTzJSZvW1mO70S2syWmdn/xl/fAppI2ruydmVTaWkp/fv3Z+LEiTRv3pxf/vKX/OMf/6C4uJg2bdrwq1/9KtdNdM4551w9U+dmHiTlA4OAowjtXwosAR43s2kxz83AJWY2WdJs4GkzezQemwsMM7P3JBUAd5H+jchjgFPNbL2klknpXWP9W4HVkiYD5YSXuuUDnwIvSOprZrOA7wFLzexXksYAY4HL09SZrh8lwEnAS8CZwPNmVibpPmComb0eL8ArZWZrJd0NlJrZH2JdDwJ3mNlrkg4h3GnvGE9pB/QCDgfeAPqb2fUKL4DrDcyqWIekvQgvvhtoZoslNQe2pIufmY2UdLmZVfUdDl8B/czsc0mtgQXxu84H+rPz38eu6A8sM7OtqQ5KGgoMBWjden/GdN62i9WlVlRU9M3nbdu2MWrUKAoKCmjVqtW3jgF07tyZBx98cKf0+qa0tLTe93F34zHPPo95dnm8s89jnl27Gu86N3gATgSeMLMvAeIFI8AR8WK7JZBHihesScoDjgdmSkokZ7qbPB+YLunvwONJ6XPNbFMscxXwQ2A/oMjMNsb0GUBPwoX1dna8QfpvFcqqKF0/HgEGEgYPg4C74oCmmZkllh49CPTJUHYmPwMOT4pLc0nN4uf/jgOVFUBD4LmYvgJom6a8DsAGM1sMXYKsewAAIABJREFUYGafA8TyU8VvXTXbK2CcpJ6E+B4EfB/oATxpZlti+U9Vs9xvVyJ1IgwKf54uj5lNBaYCHHLYj2zCitr5b7X2gsJEfQwePJgTTjiBiRMnfnN8w4YNtGnTBoA77riDgoICCgsLa6Utu4uioqJ638fdjcc8+zzm2eXxzj6PeXbtarzr4uABwFKkTQf6mlmJpCGENf0VNQA+q+rdbTMbFmcnegPFkhLnJd+BLifEURXPz1R0hmPTSd2P2cCtkloR7q7PA5pXo87KNACOS1x0J8SL/a0AZrZdUpmZJdq/nfR/QyJ9P1PFr7ouAPYH8uPAZi3QhOp9DxlJOhh4Avh3M/tHVc5p2rghq1PsTahJ8+fP54EHHqBz58507Rr+JMeNG8dDDz1EcXExkmjbti333FNxG4dzzjnn3K6pi4OHVwizAeMJ7T+TsNm1GbAhrsG/AEg8fmZzPEZc4rJG0jlmNlPhyriLmZWkqkhSOzNbCCyUdCbwgwztWghMiktoPgXOAybHYw2AAcDDwPnAaxnKSdkPMyuVtAiYRFiGVQ58KmmzpGPNbAFhRqKqNvPtwccLhKVUtwNI6mpmxdUor6J3CHtDjo7LlpqxY9lSOmWSGptZWRXKbwF8FAcOvQizFxBie4+kWwl/H72BadVtfJzVeQYYZWbzq3t+berRowc7xm87nHHGGTlojXPOOef2JHVuw7SZLSUs4SkGHgNejYdGEy7g5xAuXBMeBq6TtExSO8IF+SVxD8FbwFmkd3vcjLuSMGhJOciI7doAjCIsKyoh7HF4Mh7+AugkaQlhf8VNGepM1w9ivy9kxxIogEuAqZLeINx135Sh7GRPAf0SG6aBK4HucfP1KsKG6u/MzL4mLLNK7NeYQ5gZyGQqsLwqG6aBGbG9bxK+03divYsJszQlhOVhb5IhJpL6SfoQOA54RlJimdjlwI+A0TFGxZIOqEK7nHPOOefqLaW6g+lqlqRSM8urpbLzzKw0fh4JtDGzq2qjrroiERNJ+xAGfUPjoLPWdejQwVav3unhTa6W+DrZ7POYZ5/HPLs83tnnMc+u5HhLWmJm3TOf8W11cdmS+7bekkYRvssPgCG5bc5uYarCiwGbAPdna+DgnHPOOVff+eCB8N4I4JwKyTPN7JaaKD/VrIOkKcAJFZInmdl91Sz7Eb69jAlJpxKeEJRsjZn1q07ZVRUf2XpoheQRZrbTE6+qWN5+wNwUh042s08qO9/Mzk9RZo3E2znnnHNuT+aDByAOEmpkoFCNOofXYtnPk+JRtbVYX40OSuIAoarve6hqmbUWb+ecc865PUWd2zDtnHPOOeecyw0fPDjnnHPOOeeqxAcPzjnnnHPOuSrxwYNzdci6devo1asXHTt2pFOnTkyaNOlbx//whz8giY8//jhHLXTOOedcfeYbpp2rQxo1asSECRPo1q0bmzdvJj8/n1NOOYXDDz+cdevWMWfOHA455JBcN9M555xz9VS9mXmQdKOkazMc7xuf/f9dyh4m6d/j5yGSDvyu7cw1STdJ+ln8/F/xRWq7BUldJZ1RSZ4hku6s4Xr/Iumj+Cbx5PTbJb0T37r9hKSWNVnvd9GmTRu6desGQLNmzejYsSPr168H4Oqrr+a2225DUi6b6Jxzzrl6bE+aeegLPA2squ6JZnZ30q9DgJXA/9ZMs7LLzMYk/fpfwN+AL3PUnIq6At2BZ7Nc73TgTuCvFdLnAKPMbJuk3wOjgBGZCtpSVk7bkc/UeAPXju+9c9ratSxbtoyCggJmz57NQQcdxJFHHlnjdTvnnHPOJdTpmQdJv5G0WtKLQIeYdpmkxZJKJD0maR9JxwO/AG6XVCypXfz3nKQlkl6V9JMM9dwo6VpJAwgXtzNiOU0l5Ut6OZbzvKQ28ZwiSXdIekXS25KOlvS4pPck3VxJv2bF8t6SNDSm/VLSbUl5hkiaHD+PjnfI50h6qJIZmOmSBki6EjgQeEnSS/HYzyW9IWmppJmS8mL6Wknj4rE3JXWLff2HpGGV9OV6SSvi9zE+KTa/l7RI0ruSTpS0F3ATMDDGdmCmcmM5Z0paKGmZpBclfT+m7x9jsVTSPZI+kNQ6XTlm9grwrxTpL5jZtvjrAuDgytqULaWlpfTv35+JEyfSqFEjbrnlFm666aZcN8s555xz9VydnXmQlA8MAo4i9GMpsAR43MymxTw3A5eY2WRJs4GnzezReGwuMMzM3pNUANwF/DRTnWb2qKTLgWvN7E1JjYHJwFlmtjFe8N4CXBxP+drMekq6CngSyCdcpP5D0h0Z3pZ8sZn9S1JTYLGkx4BHgTeA62OegcAtkroD/VPEISMz+6Oka4BeZvZxvLi+AfiZmX0haQRwDeGCHmCdmR0n6Q7CnfoTgCbAW8DdO9cAkk4nzPgUmNmXklolHW5kZsfEZUpjzexnksYA3c3s8sraH70GHGtmJunSGJtfAWOBeWZ2q6TTgKFVLC+Ti6nwJu+EOMAbCtC69f6M6bwtVbZdUlRU9M3nbdu2MWrUKAoKCmjVqhUPP/ww7777Lh06dABg48aNdOrUiT/96U+0atUqTYn1Q2lp6bdi42qfxzz7PObZ5fHOPo95du1qvOvs4AE4EXjCzL4EiIMDgCPioKElkEeKNy3HO+rHAzOT1ofv/R3a0AE4ApgTy2kIbEg6nmjTCuAtM9sQ6/8n8AMg3eDhSkmJtzb/AGhvZgsk/VPSscB7se75wFXAk2a2JZb91HfoB8CxwOHA/NiXvQiDlVR9yTOzzcBmSV9Jamlmn6Uo82fAfYnvyMyS7+4/Hn8uAdp+xzYfDDwSZ3v2AtbE9B5Av1jnc5I+/Y7lA2GGC9gGzEh13MymAlMBOnToYFdccNauVJeRmTF48GBOOOEEJk6cCEBhYSEXX3zxN3natm3Lm2++SevWaSdb6o2ioiIKCwtz3Yw9isc8+zzm2eXxzj6PeXbtarzr8uABwFKkTQf6mlmJpCFAYYo8DYDPzKzrLtYvwqDguDTHt8af25M+J35PGXtJhYSL7uPi3foiwh1+CHe+zwXeIQycTKqx3bEC5pjZeWmOV7svscxU31FyeeUZzq/MZOD/M7PZMW43JtVbIyQNBvoAJ5tZur5kzfz583nggQfo3Lkz/6+9Ow+TqrrzP/7+gCgqiEEgo6ASjdMaMZKAo0TFRqPGAaMkGkWchMjIOFHjLxPjGteJxkQzatwS1IBJFPcVJwiDIMaF1WbR2E8ysR1JcI2g7RaE7++PexqKpqq6G2qR7s/refrpqnNvnXPut1q833vOuXfgwOzP9/LLL+ef/7noOnMzMzOzktiU1zzMAkamdQfdgSNTeXdgWZpSNDpn/3fTNiLiHeAlSccCKNPalaZr6gHqgd6ShqR6ukjac2MOCugBvJ0Sh93JRgSa3E82DWgUa6fQ/B44UlLXNKKy/srawnKP5Vlgf0mfBVC2VuQfN+I4AKYCJynd0anZtKWW+tMaPYC/pNffyin/PVmShaTDgE+1oc410pSns4GvNo2eVNsBBxxARLBo0SLq6uqoq6tbL3FoaGjoEKMOZmZmVnmbbPIQEQvITqDrgPuAJ9OmC4DZZHfKeTHnI3cCP0iLa3clSyzGSlpINm+/tXNNJgK/kFRHNk3pGOAnqZ46sulQG2MKsJmkRcB/kp3UAxARb5PdLWrniJiTyuaSTSlaSJZczANWtLKt8cDvJM2IiDfI7iQ1KbX9LFBwEXlrRMSU1Ld5KV4FF3InM4DPtXbBNNlIwz2SngRyn4p2CXCYpAXAEWRTyd4tVImkSWRTtGokLZU0Nm26niyZmZb6lHdth5mZmVlHoU/ATAzbSJK6RURjusI/CxiXkqsOSdIWwKp0i9UhwE0lmKLWKjU1NVFfX1+JpgzPk60Gx7zyHPPKcrwrzzGvrNx4S5ofEYPb8vlNfc2DZcYrewBeV+C2jpw4JDsBd0vqBPwdOLnK/TEzMzNrF5w85Eh31Tm2WfE9EXFZGdraDpieZ9MhRW7hmldEnJCn/hvIbqea69qImNCWultD0l7Ab5oVfxQR+25End8mu5NUrqci4tSWPhsRfyS7dW1ufSWLt5mZmVlH5eQhR0oSSp4oFGjrLbInKper/hZPskvY1mJKfCwpySlZolPueJuZmZl1BJvsgmkzMzMzM6ssJw9mZmZmZtYqTh7MzMzMzKxVnDyYfUKddNJJ9OnThwEDBqwpq6urY7/99mPgwIEMHjyYOXPmVLGHZmZm1tE4ebBPDEmnSPpmej1G0g5V6EODpE/E45nHjBnDlClT1ik766yzuOiii6irq+PSSy/lrLPOqlLvzMzMrCPy3ZbsEyMicp/gPAZYAvy1Or3ZMB+sXEX/cx7d4M83XDF8zeuhQ4fS0NCwznZJvPPOOwCsWLGCHXaoeH5lZmZmHZiTB6uaNMpwJhDAIuB/gUagARgM3C7pA+B84F8jYmT63KHAv0fE1wrU+xXgcqAz8GZEHCKpJ/ArYBfgfbKncC9Kz3+YBPQG5gDKqedE4LvA5sBs4DsRsaqkQWija665hsMPP5wzzzyT1atX8/TTT1ezO2ZmZtbBKCKq3QfrgCTtCdwP7B8Rb6aT++8CjRFxlaSZwJkRMU+SgD8AB0bEG5LuACZFxCN56u0NLACGRsRLknpGxN8kXUeWSFwi6WDgvyJioKSfp/JLJQ0HJpMlEr2BnwJfi4iVkm4Eno2IX+dpcxwwDqBXr96DLrzm5g2Oy159e6zz/tVXX+Xcc89lwoTskRc///nP2XvvvTnooIOYMWMGkydP5mc/+9kGt7epa2xspFu3btXuRofimFeeY15ZjnflOeaVlRvvYcOGzY+IwW35vJMHqwpJpwP/EBHn55RdTJ7kIW07n2zEYALwHLBbRHycp94jgeMjYnSz8ueAr0fEn9P7V4ABwBNkCUJT+d+AfwSOB84DXk9VbEmWsFxc7Lh22uWz0ekb17YhEuvKnbYE0NDQwIgRI1iyZAkAPXr0YPny5UgiIujRo8eaaUwd0cyZM6mtra12NzoUx7zyHPPKcrwrzzGvrNx4S2pz8uBpS1YtIpuu1FoTgEeAD4F78iUOLdSrPGXR7Hfz/W+LiHPb0Ee27NKZ+mYJQCntsMMOPPHEE9TW1vL444+z2267la0tMzMzs+Z8tyWrlunAN9KaA9K0pVzvAt2b3kTEX8kWT/8QmFik3meAgyR9plm9s4DRqayWbKrSO83KjwA+ldO/YyT1aapH0s4bcqAbatSoUQwZMoT6+nr69evHrbfeys0338z3v/999t57b8477zzGjx9fyS6ZmZlZB+eRB6uKiHhe0mXAE5JWkU1FasjZZSLwi7RgekhEfADcDvSOiBeK1PtGWoNwv6ROZNOODgUuBiZIWkQ2/elb6SOXAJMkLSCbwvR/qZ4XJP0QmJrqWQmcCrxciuNvjUmTJuUtnz9/fqW6YGZmZrYOJw9WNRFxG3BbgW33Afc1Kz4AaHE1ckT8Dvhds7K/AUfl2fct4LCcou/lbLsLuKul9szMzMw6CicPtkmQNB94D/h+tftiZmZm1lE5ebBNQkQMal4maTawRbPif4mIxZXplZmZmVnH4uTBNlkRsW+1+2BmZmbWkfhuS2ZmZmZm1ipOHszMzMzMrFWcPJiZmZmZWas4eTD7hDrppJPo06cPAwYMWFNWV1fHfvvtx8CBAxk8eDBz5sypYg/NzMyso3HyYPYJNWbMGKZMmbJO2VlnncVFF11EXV0dl156KWeddVaVemdmZmYdUbtOHiRdLOnMItuPlvS5ErY3RtL1paqvkiQNlvTz9LpW0peq3adcks5rxT6NZWj3dEn1kp6X9NNS11/M0KFD6dmzZ/P+8M477wCwYsUKdthhh0p2yczMzDq4jn6r1qOBycAL1e5ItUXEPGBeelsLNAJPV61D6zsPuLySDUoaRvZU6s9HxEeS+rT0mQ9WrqL/OY9ucJsNVwwvuv2aa67h8MMP58wzz2T16tU8/fQn6SsyMzOz9q7djTxIOj9dKf4foCaVnSxprqSFku6TtFW6sv5V4EpJdZJ2TT9TJM2X9KSk3Yu0c6ykJanOWTmbdkh1/DH3SrWkUZIWp8/8JKe8UdLPJC2QNF1S7yJt5juOHpIaJHVK+2wl6RVJXSTtI2mRpGckXSlpSZG6ayVNltQfOAX4XorLgZJ6p/bmpp/902culnSbpKmpD1+T9NN0nFMkdSnS3j6Snk7HMkdS9zRyc3/z+Em6Atgy9ef2QnXm1N0txXJB6stROdsukPSipGmSJhUbmQL+HbgiIj4CiIjXW2q73G666SauvvpqXnnlFa6++mrGjh1b7S6ZmZlZB6KIqHYfSkbSIGAisC/ZqMoC4BfAhIh4K+3zI+C1iLhO0kRgckTcm7ZNB06JiD9K2hf4cUQcXKCtxcBXIuIvkraNiOWSxgAXAl8APgLqgQOAVcCzwCDgbWAq8POIeFBSACdGxO2SLgT6RMRpBdrcrsBxPARcExEzJB0HHBoR/5qShXER8XQ6AR8REQMK1F0LnBkRIyRdDDRGxFVp2x3AjRHxe0k7AY9FxB5pvy8Dw4DPAc8AX4+I30l6ALgtIh7M09bmwIvAcRExV9I2wPvAifniFxGvSGqMiG75+p5Tb2NEdJO0GbBVRLwjqVeK/W4p/rcAQ1j79/HLpuPMU18d8BDwFeDDFJ+5efYbB4wD6NWr96ALr7m5WDeL2qtvj3Xev/rqq5x77rlMmDABgBEjRvDII48giYhgxIgRPProho90bOoaGxvp1q3on4WVmGNeeY55ZTneleeYV1ZuvIcNGzY/Iga35fPtbdrSgcADEfE+gKSHU/mAdLK9LdANeKz5ByV1A74E3COpqXiLIm09BUyUdDdwf0759IhYkep8AdgZ2A6YGRFvpPLbgaHAg8Bq4K702d82q6u5QsdxF3AcMAM4HrhR0rZA94homtdyBzCiSN3FfBn4XE5ctpHUPb3+XUSsTMlUZ6Bphe9ioH+B+mqAZU0n4hHxDmTz+ckfv1fa2F8Bl0saShbfvsCnyRK5hyLig1T/Iy3UsxnwKWA/YB/gbkm7RLOMOyLGA+MBampq4vTRR61X0YZqaGhg6623pra2FoAdd9wRSdTW1jJ9+nR23333Nds6opkzZ3bo468Gx7zyHPPKcrwrzzGvrI2Nd3tLHgDyDaVMBI6OiIVpdKA2zz6dgOURMbBVjUSckkYnhgN1kpo+91HObqvIYqzmny9WdZFtE8l/HA8DP5bUk+zq+uPANm1osyWdgCFNJ91N0sl+05Se1ZJW5pxYr6bw35cofJz54tdWo4HewKCU2DQAXWnb9wCwFLg/HdMcSauBXsAbG9CnNhs1ahQzZ87kzTffpF+/flxyySXcfPPNnHHGGXz88cd07dqV8ePHV6IrZmZmZkD7W/MwCxgpact0ZfzIVN4dWJbm4I/O2f/dtK3p6vdLko4FUGbvQg1J2jUiZkfEhcCbwI5F+jUbOEhSL0mdgVHAE2lbJ+CY9PoE4PdF6sl7HBHRCMwBriWbhrUqIt4G3pW0X9rt+CL1NrcmLslUYM1UqpxEaUO9SLY2ZJ9UX/c01aiYlcXWUDTTA3g9JQ7DyEYvIIvtkZK6ppGm4quTs5Ghg1Mf/xHYnOy7rohJkyaxbNkyVq5cydKlSxk7diwHHHAA8+fPZ+HChcyePZtBgwZVqjtmZmZm7St5iIgFZFN46oD7gCfTpgvITuCnkZ24NrkT+IGk5yTtSnZCPlbSQuB5sjvtFHJlWoy7hCxpWVikX8uAc8mmFS0EFkTEQ2nze8CekuaTnaheWqTNQsdBOu4TWTsFCmAsMF7SM2RX3VcUqTvXI2RJWJ2kA4HvAoOVLb5+gWxB9QaLiL+TTbO6LsV6GtnIQDHjgUWtWTAN3J76O4/sO30xtTuXbJRmIdn0sHkUj8mvgF3Sd3wn8K3mU5bMzMzMOpJ2tWB6U9SahcAbUXe3NCqBpHOA7SPijHK0taloiomkrciSvnEp6SyJmpqaqK+vL1V11gLPk608x7zyHPPKcrwrzzGvrNx4S+rwC6ZtXcMlnUv2Pb8MjKludz4Rxit7MGBXsrtBlSxxMDMzM2vvnDy0QNL5wLHNiu+JiMtKUX++UQdJNwD7Nyu+NiImtLHuu1h3GhOSDgd+0mzXlyJiZFvqbq10y9bPNCs+OyLWu+NVK+vbDpieZ9MhTbexLSYiTshTZ0nibWZmZtbeOXloQUoSSpIotKHNU8tY92PkuVVtGdsraVKSEoSNXbDdvM6yxdvMzMysPWlXC6bNzMzMzKx8nDyYmZmZmVmrOHkwMzMzM7NWcfJg9glx0kkn0adPHwYMGLDetquuugpJvPlmxZ5RZ2ZmZrYeJw9mnxBjxoxhypQp65W/8sorTJs2jZ122qkKvTIzMzNbq2LJg6SLJZ1ZZPvR6f77pWpvjKTrS1Xfpk5SYyv2mSjpmEr0p0D757VinxaPo41tHivpeUmrJQ3OKT9U0vz0FPH5kg4uZbv5DB06lJ49e65X/r3vfY+f/vSnSCp3F8zMzMyK+iTdqvVoYDLwQrU7YlVzHnB5hdtcAnwN+GWz8jeBIyPir5IGkN3etm9LlX2wchX9z3m0TR1ouGJ4wW0PP/wwffv2Ze+9925TnWZmZmblUNbkIT1g7ZvAK8AbwHxJJwPjgM2BPwH/Qnbf/q8CB0n6IfD1VMUNQG/gfeDkiHixQDvHAhcBq4AVETE0bdpB0hRgV+CBiDgr7T+K7ERVwKMRcXYqbyQ7iRwGvA0cHxFvFGgz33F0ARYCu0TEaklbAfXALukYbwXeA34PHBER609uz+r+b+CciFgk6bnU90sl/SfwckTcIukHwDeALdL2i9JnTwS+m/o1G/hORKzKqbsX8AjwI+C/geuAg4GXUjya9rsQOBLYEnga+Ld0HPdExBfTPrsBd0bEoALHsQ9wLbA18BFwCNl3+1Vgq9zvRdIVwJaS6oDnI2J0vjpz6u4GPAR8KsX9hxHxUNp2ATCa7O/uTWB+RFyVr56I+EP6TPPy53LePg90lbRFRHyUpy/jyP4W6NWrNxfu9XGxrq9n5syZa16/+uqrvPfee8ycOZMPP/yQs88+myuvvHLN+6eeeooePXq0qf72rLGxcZ34Wfk55pXnmFeW4115jnllbWy8y5Y8SBoEHA98IbWzAJgP3B8RN6d9fgSMjYjrJD0MTI6Ie9O26cApEfFHSfsCN5Kd5OZzIXB4RPxF0rY55QNT+x8B9ZKuI0swfgIMIksQpko6OiIeJDvJXRAR308nzxcBpxVos9BxLAQOAmaQnXw/FhErJU0AxkXE0+lEuZhZwIGSGoCPWfv04wOA30o6DNgN+CeyE/6HJQ0lS9COA/ZPbd5IdhL969TPTwMPk51oT5P0NaAG2Av4NNmoz69SW9dHxKXpc78BRkTEI5JWSBoYEXXAt4GJ+Q5A0uZkT7c+LiLmStoG+CBtXu97iYhzJJ0WEa19ANyHwMiIeCclRM+mv6FBZAlK87+7jfF14Ll8iQNARIwHxgPstMtn42eL2/afVcPo2rWvGxrYeuutqa2tZfHixbz11lucdlr2J/jmm29y+umnM2fOHP7hH/5hw46knZk5cya1tbXV7kaH4phXnmNeWY535TnmlbWx8S7nyMOBZFeV3wdIJ3YAA9LJ9rZAN/I87ThdVf4ScE/OFeEtirT1FDBR0t3A/Tnl0yNiRarzBWBnYDtgZtOIgqTbgaHAg8BqshNegN82q6u5QsdxF9kJ/Ayy5OnGlNB0j4in0z53ACOK1P0k2ejBS8CjwKFpFKN/RNSnUY/DgKar493IkonPk508z01x2xJ4Pe3TBZgOnBoRT6SyocCkNDLxV0mP5/RhmKSzyEYIepJdfX8EuAX4tqT/SMf5TwWOoQZYFhFzASLiHVhzhT/f9/JKkXjkI+DylDStJptS9GmyBOuhiPgg1f9IG+tdtxFpT7Jk87DW7L9ll87UF5mG1BZ77bUXr7/++pr3/fv3Z968efTq1ask9ZuZmZm1VbkXTEeesonAaRGxF3AJ0DXPPp2A5RExMOdnj4KNRJwC/BDYEaiTtF3alHuleBVZstSWVaf5+t9kIvmP42HgCEk9yU7kH29jmwBzgcFkCdgssiThZNZeQRfw45zYfDYibk3lt+WU10TExekzH6fPH97SMUrqSjbSc0w6vptzju8+4Aiy5Gd+RLxV4BiUr+4k3/fSVqPJprQNSqMVr6U+lmxVsaR+wAPANyPif0tVbyGjRo1iyJAh1NfX069fP2699dZyN2lmZmbWJuVMHmYBIyVtKak72RQegO7AMkldyE4Am7ybtjVdpX4prWVAmYIrRiXtGhGzI+JCsjnuOxbp12yytRW9JHUGRgFNV+I7AU13GzqBbG1CIXmPIyIagTlkc/0nR8SqiHgbeFfSfmm344vUS0T8nexK/DeAZ8lGIs5MvyEb5TgpjdAgqa+kPmQjC8ek10jqKWnnpmqBk4DdJZ2TymYBx0vqLGl7srUesDZReDO1seYOTBHxYWr/JmBCkcN4kWzNyT6pL90ltZQkrEzxbI0ewOtpetYwstELyL6zIyV1TX3foGGANFr0KHBuRDy1IXW01aRJk1i2bBkrV65k6dKljB07dp3tDQ0NHnUwMzOzqipb8hARC8im8NSRXa1uOvG9gOwEfhrZCWaTO4EfSHpO0q5kJ+Rj0xqC54GjijR3Zbql5hKyE+KFRfq1DDiXbFrRQrI1Dg+lze8Be0qaT7a+4tIibRY6DtJxn8jaKVAAY4Hxkp4huzq+okjdkMXrtTTt60mgX/pNREwlm/r0jKTFwL1k06JeIBuBmSppUerb9jnHvooscRkm6TtkV9X/CCwmSwaeSPstJxttWEw2nWtus77dTpaMTC3U+ZQAHQc0rQOZRv5RplzjgUVpKllLbgcGS5pH9rfyYmp3Ltnoz0LOcUAOAAAXmklEQVSyaWfzKBJrSSMlLQWGAI9Kapp+dhrwWeACSXXpp08r+mVmZmbWbimi2MycjkVSY0R0K1Pd3dKoBOnK//YRcUY52io3Zc/r6BERF1S7L/k0xTqtE5lFtlB9QSXarqmpifr6+ko0ZXiRXTU45pXnmFeW4115jnll5cZb0vyIGFz8E+v6JD3nob0bLulcspi/DIypbnc2jKQHyG6xWvaHpm2E8coeONiVbA1IRRIHMzMzs/Zuk0oelD034thmxfdExGWlqD/fqIOkG1h7q9Qm10ZEsfn++eq+i3WnMSHpcLI7+eR6KSJGtqXuSsrXt5RQfKZZ8dkRsd6dtFojLXifnmfTIUUWaOf28YQ8dZbkezQzMzPryDap5CElCSVJFNrQ5qllrPsx8tyqdlNT6mQnJQitfd5Da+ss2/doZmZm1lGU+1atZmZmZmbWTjh5MDMzMzOzVnHyYFZFJ510En369GHAgAFryu655x723HNPOnXqxLx586rYOzMzM7N1OXkwq6IxY8YwZcqUdcoGDBjA/fffz9ChQ6vUKzMzM7P82nXyIOni9EyCQtuPTrf0LFV7YyRdX6r6KknSYEk/T69rJX2p2n3KJem8VuzTWOI2/1PSovSAuKmSdihl/QBDhw6lZ8+e65Ttscce1NTUlLopMzMzs422Sd1tqQyOBiYDL1S7I9UWEfPInsYMUAs0Ak9XrUPrOw+4vMJtXtn0IDxJ3wUuBE4p9oEPVq6i/zmPtlhxwxXDS9JBMzMzs0pqdyMPks6XVC/pf4CaVHaypLmSFkq6T9JW6cr6V4Er05XlXdPPFEnzJT0pafci7RwraUmqc1bOph1SHX+U9NOc/UdJWpw+85Oc8kZJP5O0QNJ0Sb2LtJnvOHpIapDUKe2zlaRXJHWRtE+6cv6MpCslLSlSd62kyZL6k50gfy/F5UBJvVN7c9PP/ukzF0u6LV2Vb5D0NUk/Tcc5RVKXIu3tI+npdCxzJHVPIzf3N4+fpCuALVN/bi9UZ07d3VIsF6S+HJWz7QJJL0qaJmlSsZGpiHgn5+3WgB/HbmZmZh1auxp5kDQIOB74AtmxLQDmA/dHxM1pnx8BYyPiOkkPA5Mj4t60bTpwSkT8UdK+wI0UfpLyhcDhEfEXSdvmlA9M7X8E1Eu6DlhF9jC4QcDbwFRJR0fEg2QnpQsi4vuSLgQuAk4r0Gah41gIHATMAI4EHouIlZImAOMi4ul0At6iiGiQ9AugMSKuSm3dAVwdEb+XtBPZsyn2SB/ZFRgGfA54Bvh6RJyVHhw3HHiweRuSNid7YN5xETFX0jbAB4XiFxHnSDotIlr77IcPgZER8Y6kXsCz6bseBHyd9f8+CpJ0GfBNYEU6znz7jAPGAfTq1ZsL9/q4xQ7OnDlzzetXX32V9957b50ygOXLlzN//nwaG0s6G6tdaWxsXC9uVl6OeeU55pXleFeeY15ZGxvvdpU8AAcCD0TE+wDphBFgQDrZ3hboRp4Hs0nqBnwJuEdSU/EWRdp6Cpgo6W7g/pzy6RGxItX5ArAzsB0wMyLeSOW3A0PJTqxXs/bJ079tVldzhY7jLuA4suTheODGlNB0j4imqUd3ACOK1F3Ml4HP5cRlG0nd0+vfpURlMdAZaFr9uxjoX6C+GmBZRMyFtVf4U/354vdKG/sr4HJJQ8ni2xf4NHAA8FBEfJDqf6SliiLifOB8SeeSJXUX5dlnPDAeoKamJk4ffVTzXYpqaGhg6623pra2dp3ybbfdlkGDBjF48OA21deRzJw5c724WXk55pXnmFeW4115jnllbWy82920JfJPLZkInBYRewGXAF3z7NMJWB4RA3N+9sizX9ZIxCnAD4EdgTpJ26VNH+XstoosQROtV2xqzETyH8fDwBGSepJdXX+8jW22pBMwJCcufSPi3bTtI4CIWA2sjIim/q+mcHIqCh9nvvi11WigNzAojVa8RharjYnJHWSjFiU1atQohgwZQn19Pf369ePWW2/lgQceoF+/fjzzzDMMHz6cww8/vNTNmpmZmW2Q9pY8zAJGStoyXRk/MpV3B5alOfijc/Z/N21ruvr9kqRjAZTZu1BDknaNiNkRcSHwJlkSUchs4CBJvSR1BkYBT6RtnYBj0usTgN8XqSfvcUREIzAHuJZsGtaqiHgbeFfSfmm344vU29yauCRTyZlKJam104cKeZFsbcg+qb7uklpKElYWW0PRTA/g9TQiMoxs9AKy2B4pqWsaaSq6alnSbjlvv5r6XVKTJk1i2bJlrFy5kqVLlzJ27FhGjhzJ0qVL+eijj3jttdd47LH1BsrMzMzMqqJdTVuKiAWS7gLqgJeBJ9OmC8hO4F8mm07TdGJ8J3CzsjvpHEN2Qn6TpB8CXdL2hQWauzKdXAqYnvbLe1IdEcvStJcZaf//joiH0ub3gD0lzSebV39ckUMsdByQTV26h+xOSU3GpuN7D5iZ6m+NR4B700Lj04HvAjdIWkT2NzOLFu46VExE/F3SccB1krYkW+/w5RY+Nh5YJGlBRIxuYd/bgUckzSP7W3gxtTs3TWVbSBbDeRSPyRWSashGUV5mI47ZzMzMrD3Q2lkmVg2SGiOiW5nq7pZGJZB0DrB9RJxRjrY2FU0xkbQVWRI0LiIWlKr+mpqaqK+vL1V11gLPk608x7zyHPPKcrwrzzGvrNx4S5ofEW1aXNmuRh5sPcPTiMdmZFfOx1S3O58I45U9GLArcFspEwczMzOz9s7JQwsknQ8c26z4noi4rBT15xt1kHQDsH+z4msjYkIb676LtXdyaqr7cLLbxuZ6KSJGtqXu1kq3bP1Ms+KzI2KDJvKnhenT82w6JCLeaunzEXFCnjpLEm8zMzOz9s7JQwtSklCSRKENbZ5axrofI8+tasvYXkmTkpQgbOyC7eZ1li3eZmZmZu1Je7vbkpmZmZmZlYmTBzMzMzMzaxUnD2ZmZmZm1ipOHswqqL6+noEDB6752Wabbbjmmmuq3S0zMzOzVvGCabMKqqmpoa6uDoBVq1bRt29fRo4sy42uzMzMzEquYiMPki6WdGaR7Uen+++Xqr0xkq4vVX2bOkmNZaizv6QlJayvVtKXWtin6N/RBrY7RdJySZObld8uqV7SEkm/ktSllO1Onz6dXXfdlZ133rmU1ZqZmZmVzSdp5OFoYDLwQrU7YlVTCzQCT1e43SuBrYB/a1Z+O3Bien0H8K/ATcUq+mDlKvqf8+h65Q1XDF+v7M4772TUqFEb0F0zMzOz6lBElK/y7AFr3wReAd4A5gMrgHHA5sCfgH8hu2//5LRtBfD1VMUNQG/gfeDkiHixQDvHAhcBq4AVETFU0hjgq2QnhbsCD0TEWWn/UcB5gIBHI+LsVN4I/BIYBrwNHB8RbxRo8+Q8x9EFWAjsEhGrJW0F1AO7pGO8FXgP+D1wREQMKFD3fwPnRMQiSc+lvl8q6T+BlyPiFkk/AL4BbJG2X5Q+eyLw3dSv2cB3ImKVpMaI6CapF/AI8KOIeDRfPZL6A79L/fwS8BfgqIj4QNIg4FfpO2npODqTPZDucCCAmyPiOkkNwG3AkSlmxwIfAs+m7/AN4PSIeDJPnRcDjRFxVb7vICLel7Qr2Yl/53Qc/5HvYXzN6q0FzoyIEQW2fw/oFRHn59k2LvWDXr16D7rwmpvX+/xefXus837lypUcc8wxTJgwgZ49exbrmhXR2NhIt25Fv1orMce88hzzynK8K88xr6zceA8bNmx+RAxuUwURUZYfYBCwmOzkfRuyk7szge1y9vkR2UkiwETgmJxt04Hd0ut9gceLtLUY6Jteb5t+jwH+DPQAugIvAzsCOwD/R5aUbAY8DhydPhPA6PT6QuD6Im0WOo6HgGHp9XHALen1EuBL6fUVwJIidZ8DnJriNhd4LJXPAGqAw4DxZMlPJ7LEayiwB1li0CXtfyPwzfS6Efg0WUJxaCorVE9/4GNgYNrvbuDE9HoRcFB6fWULx/HvwH3AZul9z/S7ISde38mJ0cVkJ/DF/q7W7FPkO5gMjEqvTyFLNlr6e60FJhfY1gVYABzYUj07fmbX2Pnsyev9NPfggw/GoYceul65tc2MGTOq3YUOxzGvPMe8shzvynPMKys33sC8aOM5fjmnLR1IdiX7fQBJD6fyAZJ+BGwLdCPP044ldSO74n2PpKbiLYq09RQwUdLdwP055dMjYkWq8wVgZ2A7YGakEQVJt5OdMD8IrAbuSp/9bbO6mit0HHeRJQ0zgOOBGyVtC3SPiKbpOHcAea9wJ0+SjR68BDwKHJpGMfpHRH264n4Y8FzavxuwG/B5sqRtborblsDraZ8uZAnZqRHxRCo7rEA9/we8FBF1qXw+0F9SD7LkrOnzvwGOKHIcXwZ+EREfA0TE33K2NcV2PvC1InUUU+g7GEI2DQ6yWF+1gfU3uRGYFXlGQprbsktn6vNMUWpu0qRJnrJkZmZmm5xyr3nINydqItmV/oVpalFtnn06AcsjYmCrGok4RdK+wHCgTlLT5z7K2W0V2fGq+eeLVV1k20TyH8fDwI8l9SQ7kX+cbAShLeYCg8lGTqYBvYCTyU60ITuGH0fEL3M/JOl04LaIODdPnR+nzx8ONJ38F6qnP+vHbsu0f1vmuRXbv6n+pu9lQ0yk5b+ljSLpIrJRqubrITbY+++/z7Rp0/jlL3/Z8s5mZmZmnyDlvNvSLGCkpC0ldSeb3w7QHViW7lwzOmf/d9M2IuId4KW0lgFl9i7UkKRdI2J2RFwIvEk2PamQ2cBBknqlOfmjWHsy3Qk4Jr0+gWxOfyF5jyMiGoE5wLVk02BWRcTbwLuS9ku7HV+kXiLi72TrRL5Btg7gSbIpX01Xvh8DTkojNEjqK6kP2cjCMek1knpKarqVTwAnAbtLOqeFegr1azmwQtIBqWh0oX2TqcApkjZr6k8L+6/5G2ilQn9Lz7J23UzRWBcj6V/Jkq1REbF6Q+tpbquttuKtt96iR48eLe9sZmZm9glStuQhIhaQTeGpI5v33nTiewHZCfw0IHcB9J3ADyQ9lxa8jgbGSloIPA8cVaS5KyUtTrcNnUW2aLlQv5YB55JNK1oILIiIh9Lm94A9Jc0HDgYuLdJmoeMgHfeJrJ0CBTAWGC/pGbIr8iuK1A1ZvF5L076eBPql30TEVLLpOM9IWgzcSzYt6gXgh8BUSYtS37bPOfZVZCfTwyR9p1A9LfTr28AN6Tg+aGHfW8imQC1K3+MJLez/CFnCWSfpwBb2hcLfwf8D/kPSHLLjLxprSU8C9wCHSFoq6fC06Rdk60SeSX26sBV9MjMzM2u3ynq3pU1N0x2JylR3tzQqQbryv31EnFGOtjq6tD7kg4gISceTjRwUSz5LpqamJurr6yvRlAEzZ86ktra22t3oUBzzynPMK8vxrjzHvLJy4y2pzXdb+iQ956G9Gy7pXLKYv0x2Nygrj0HA9cpWjS8nm65lZmZmZhtpk0oe0nMjjm1WfE9EXFaK+vONOki6Adi/WfG1ETGhjXXfxbrTmEjTY37SbNeXImJkW+qutnIcx8Z81+muSOuskZG0F9ndoXJ9FBH7bmgfzczMzDqaTSp5SCeOJUkU2tDmqWWs+zHy3Kp2U1OO4yj1dx0Ri8ke1GdmZmZmG6icd1syMzMzM7N2xMmDmZmZmZm1ipMHMzMzMzNrFScPZmZmZmbWKk4ezMzMzMysVZw8mJmZmZlZqzh5MDMzMzOzVlFEVLsPZu2GpHeB+mr3owPpBbxZ7U50MI555TnmleV4V55jXlm58d45Inq35cOb1EPizDYB9RExuNqd6CgkzXO8K8sxrzzHvLIc78pzzCtrY+PtaUtmZmZmZtYqTh7MzMzMzKxVnDyYldb4anegg3G8K88xrzzHvLIc78pzzCtro+LtBdNmZmZmZtYqHnkwMzMzM7NWcfJgVgKSviKpXtKfJJ1T7f60F5J+Jel1SUtyynpKmibpj+n3p1K5JP08fQeLJH2xej3fNEnaUdIMSX+Q9LykM1K5Y14mkrpKmiNpYYr5Jan8M5Jmp5jfJWnzVL5Fev+ntL1/Nfu/qZLUWdJzkian9453GUlqkLRYUp2keanM/66UkaRtJd0r6cX0b/qQUsXcyYPZRpLUGbgBOAL4HDBK0ueq26t2YyLwlWZl5wDTI2I3YHp6D1n8d0s/44CbKtTH9uRj4PsRsQewH3Bq+lt2zMvnI+DgiNgbGAh8RdJ+wE+Aq1PM3wbGpv3HAm9HxGeBq9N+1nZnAH/Iee94l9+wiBiYc4tQ/7tSXtcCUyJid2Bvsr/3ksTcyYPZxvsn4E8R8eeI+DtwJ3BUlfvULkTELOBvzYqPAm5Lr28Djs4p/3VkngW2lbR9ZXraPkTEsohYkF6/S/Y/m7445mWTYteY3nZJPwEcDNybypvHvOm7uBc4RJIq1N12QVI/YDhwS3ovHO9q8L8rZSJpG2AocCtARPw9IpZTopg7eTDbeH2BV3LeL01lVh6fjohlkJ3sAn1Sub+HEkrTM74AzMYxL6s0haYOeB2YBvwvsDwiPk675MZ1TczT9hXAdpXt8SbvGuAsYHV6vx2Od7kFMFXSfEnjUpn/XSmfXYA3gAlpet4tkramRDF38mC28fJdhfJtzCrP30OJSOoG3Af8v4h4p9iuecoc8zaKiFURMRDoRzaSuUe+3dJvx3wjSBoBvB4R83OL8+zqeJfW/hHxRbLpMadKGlpkX8d8420GfBG4KSK+ALzH2ilK+bQp5k4ezDbeUmDHnPf9gL9WqS8dwWtNw6np9+up3N9DCUjqQpY43B4R96dix7wC0rSCmWTrTbaVtFnalBvXNTFP23uw/tQ+K2x/4KuSGsimmB5MNhLheJdRRPw1/X4deIAsSfa/K+WzFFgaEbPT+3vJkomSxNzJg9nGmwvslu7WsTlwPPBwlfvUnj0MfCu9/hbwUE75N9NdI/YDVjQNz1rrpLnctwJ/iIj/ytnkmJeJpN6Stk2vtwS+TLbWZAZwTNqtecybvotjgMfDD2xqtYg4NyL6RUR/sn+rH4+I0TjeZSNpa0ndm14DhwFL8L8rZRMRrwKvSKpJRYcAL1CimPshcWYlIOmfya5edQZ+FRGXVblL7YKkSUAt0At4DbgIeBC4G9gJ+D/g2Ij4WzrxvZ7s7kzvA9+OiHnV6PemStIBwJPAYtbOBz+PbN2DY14Gkj5PtnCxM9kFvbsj4lJJu5BdGe8JPAecGBEfSeoK/IZsPcrfgOMj4s/V6f2mTVItcGZEjHC8yyfF9oH0djPgjoi4TNJ2+N+VspE0kOymAJsDfwa+Tfo3ho2MuZMHMzMzMzNrFU9bMjMzMzOzVnHyYGZmZmZmreLkwczMzMzMWsXJg5mZmZmZtYqTBzMzMzMza5XNWt7FzMzMNpSkVWS3v21ydEQ0VKk7ZmYbxbdqNTMzKyNJjRHRrYLtbRYRH1eqPTPrWDxtyczMrIokbS9plqQ6SUskHZjKvyJpgaSFkqansp6SHpS0SNKz6SFzSLpY0nhJU4FfS+os6UpJc9O+/1bFQzSzdsTTlszMzMprS0l16fVLETGy2fYTgMfSU3c7A1tJ6g3cDAyNiJck9Uz7XgI8FxFHSzoY+DUwMG0bBBwQER9IGgesiIh9JG0BPCVpakS8VM4DNbP2z8mDmZlZeX0QEQOLbJ8L/EpSF+DBiKiTVAvMajrZj4i/pX0PAL6eyh6XtJ2kHmnbwxHxQXp9GPB5Scek9z2A3QAnD2a2UZw8mJmZVVFEzJI0FBgO/EbSlcByIN+iROWrIv1+r9l+p0fEYyXtrJl1eF7zYGZmVkWSdgZej4ibgVuBLwLPAAdJ+kzap2na0ixgdCqrBd6MiHfyVPsY8O9pNANJ/yhp67IeiJl1CB55MDMzq65a4AeSVgKNwDcj4o20buF+SZ2A14FDgYuBCZIWAe8D3ypQ5y1Af2CBJAFvAEeX8yDMrGPwrVrNzMzMzKxVPG3JzMzMzMxaxcmDmZmZmZm1ipMHMzMzMzNrFScPZmZmZmbWKk4ezMzMzMysVZw8mJmZmZlZqzh5MDMzMzOzVnHyYGZmZmZmrfL/ASDTfOXkeZuEAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x1008 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_features(model, (10,14))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
